3.4.2.1 More attribute access for new-style classes
The following methods only apply to new-style classes.
__getattribute__(
self, name)
Called unconditionally to implement attribute accesses for instances
of the class. If the class also defines __getattr__(), the latter
will not be called unless __getattribute__() either calls it
explicitly or raises an AttributeError.
This method should return the (computed) attribute
value or raise an AttributeError exception.
In order to avoid infinite recursion in this method, its
implementation should always call the base class method with the same
name to access any attributes it needs, for example,
"object.__getattribute__(self, name)".