Why i can refer to private attribute of an object? Python
У меня есть следующий код:
class Door:
def __init__(self, other=None):
self.__room1 = None
self.__room2 = None
if other:
print(other.__room1)
self.__room1 = other.__room1
self.__room2 = other.__room2
print_obj_type(other or self)
other
- это сторонний объект
В конструкторе класса я могу без ошибок обращаться к приватному атрибуту other.__room1
. Но в следующем коде:
door_test = Door()
print(door_test.__room1)
Я вполне очевидно получу ошибку обращения к несуществующему атрибуту (из-за name mangling). Почему так работает? Почему я могу обратиться к приватному атрибуту ДРУГОГО объекта в методе класса (прошу заметить, обращаюсь не к self.__room1
, а к other.__room1
). Почему name mangling работает так?
Ответы (1 шт):
В комментарии к вопросу andreymal дал исчерпывающий ответ.
Питон применяет name mangling внутри метода класса к ЛЮБОМУ объекту, поэтому вы можете обращаться к приватным атрибутам ЛЮБЫХ объектов в МЕТОДАХ, а в любом другом месте нет(
Надеюсь, если кто-то столкнется с такой же проблемой, то ему поможет этот ответ