Advanced attribute access patterns
When many C++ and Java programmers first learn Python, they are surprised by Python's lack of a private
keyword. The nearest concept is name mangling. Every time an attribute is prefixed by __
, it is renamed by the interpreter on the fly:
class MyClass: __secret_value = 1
Accessing the __secret_value
attribute by its initial name will raise an AttributeError
exception:
>>> instance_of = MyClass() >>> instance_of.__secret_value Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'MyClass' object has no attribute '__secret_value' >>> dir(MyClass) ['_MyClass__secret_value', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__&apos...