http://qs321.pair.com?node_id=11106247


in reply to Language design: direct attribute access and postponed mutators (Perl Vs Python)

Although in Python attributes could can be accessed directly, it also has the double underscore mechanism for providing a basic level of attribute hiding e.g.
% cat stack.py class Stack(): def __init__(self): self.__items = [] def __repr__(self): return str(self.__items) def push(self, x): self.__items.append(x) def pop(self): self.__items.pop() % python3 Python 3.7.4 (default, Sep 7 2019, 18:27:02) [Clang 10.0.1 (clang-1001.0.46.4)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> from stack import Stack >>> s = Stack() >>> s.push(42) >>> s [42] >>> s.__items Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'Stack' object has no attribute '__items' >>>
I.e. prepending two underscores to an attribute name makes it harder to use from outside the class.