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__', ...
Get Expert Python Programming - Second Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.