Определение частного атрибута classe, имя которого уже определено - PullRequest
0 голосов
/ 08 апреля 2019

Я прохожу учебный курс по питону (https://www.python -course.eu / python3_class_and_instance_attributes.php )

и у меня возник вопрос по статическим методам.

Сначала определите класс:

class Robot:
    __counter = 0

    def __init__(self):
        type(self).__counter += 1

    def RobotInstances(self):
        return Robot.__counter

Затем я запустил:

print(Roboter.__counter)

Конечно, тогда возникает ошибка:

AttributeError: type object 'Roboter' has no attribute '__counter'

Затем:

Roboter.__counter = 5
print(Roboter.__counter)

Ожидается получение ошибки, но вместо этого не было ошибок и получено:

5

Я проверил dict :

print(Roboter.__dict__)

И это показывает:

{'__module__': '__main__', '_Roboter__counter': 0, '__init__': <function Roboter.__init__ at 0x7ff5d7e2ca60>, 'AnzahlRoboter': <function Roboter.AnzahlRoboter at 0x7ff5d7e2c0d0>, '__dict__': <attribute '__dict__' of 'Roboter' objects>, '__weakref__': <attribute '__weakref__' of 'Roboter' objects>, '__doc__': None, '__counter': 5}

Что именно здесь происходит?Почему можно использовать одно и то же имя уже определенного частного атрибута класса?Могут ли частные атрибуты использоваться только во время определения класса?Если так, это означает, что использование «__» впоследствии фактически не приватизирует никаких атрибутов.Похоже на лазейку в питоне.Мне интересно узнать, почему это так.

...