Which special methods bypasses __getattribute__ in Python?

You can find an answer in the python3 documentation for object.__getattribute__, which states:

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)
.

Note

This method may still be bypassed when looking up special methods as the result of implicit invocation via language syntax or built-in
functions. See Special method lookup.

also this page explains exactly how this “machinery” works. Fundamentally __getattribute__ is called only when you access an attribute with the .(dot) operator(and also by hasattr as Zagorulkin pointed out).

Note that the page does not specify which special methods are implicitly looked up, so I deem that this hold for all of them(which you may find here.

Leave a Comment