Я прохожу учебный курс по питону (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}
Что именно здесь происходит?Почему можно использовать одно и то же имя уже определенного частного атрибута класса?Могут ли частные атрибуты использоваться только во время определения класса?Если так, это означает, что использование «__» впоследствии фактически не приватизирует никаких атрибутов.Похоже на лазейку в питоне.Мне интересно узнать, почему это так.