Module (65%)
Section (26%)

Наследование: оператор is

Также стоит упомянуть оператор Python, так как он относится непосредственно к объектам - вот он:

objectOne is objectTwo

Оператор is проверяет, ссылаются ли две переменные (objectOne и objectTwo) на один и тот же объект.

Не забывайте, что переменные хранят не сами объекты, а только дескрипторы, указывающие на внутреннюю память Python.

Присвоение значения переменной объекта другой переменной не копирует объект, а только его дескриптор. Вот почему такой оператор, как is, может быть очень полезен в определенных обстоятельствах.

Посмотрите на код в редакторе. Давайте проанализируем это:

  • есть очень простой класс, оснащенный простым конструктором, создающим только одно свойство. Класс используется для создания двух объектов. Затем первая присваивается другой переменной, а ее свойство val увеличивается на единицу;
  • после этого оператор is применяется три раза для проверки всех возможных пар объектов, и все значения свойств val также печатаются;
  • последняя часть кода выполняет другой эксперимент. После трех назначений обе строки содержат одинаковые тексты, но эти тексты хранятся в разных объектах.

Код выводит:

False False True 1 2 1 True False

output

Результаты доказывают, что ob1 и ob3 фактически являются одними и теми же объектами, в то время как str1 и str2 не являются, несмотря на их одинаковое содержание.



Code

class SampleClass:
def __init__(self, val):
self.val = val


object_1 = SampleClass(0)
object_2 = SampleClass(2)
object_3 = object_1
object_3.val += 1

print(object_1 is object_2)
print(object_2 is object_3)
print(object_3 is object_1)
print(object_1.val, object_2.val, object_3.val)

string_1 = "Mary had a little "
string_2 = "Mary had a little lamb"
string_1 += "lamb"

print(string_1 == string_2, string_1 is string_2)
{{ dockerServerErrorMsg }} ×
{{ errorMsg }} ×
{{ successMsg }} ×