Наследование: оператор 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)