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 шт):

Автор решения: mautaliev

В комментарии к вопросу andreymal дал исчерпывающий ответ.

Питон применяет name mangling внутри метода класса к ЛЮБОМУ объекту, поэтому вы можете обращаться к приватным атрибутам ЛЮБЫХ объектов в МЕТОДАХ, а в любом другом месте нет(

Надеюсь, если кто-то столкнется с такой же проблемой, то ему поможет этот ответ

→ Ссылка