Name

__getattribute__ — Python 2.2 and later

Synopsis

__getattribute__(self,name)

At every request to access attribute x.y, if x is an instance of new-style class C, Python calls x .__getattribute__('y'), which must obtain and return the attribute value or else raise AttributeError. The normal semantics of attribute access (using x .__dict__, C .__slots__, C’s class attributes, x .__getattr__) are all due to object.__getattribute__.

If class C overrides __getattribute__, it must implement all of the attribute access semantics it wants to offer. Most often, the most convenient way to implement attribute access semantics is by delegating (e.g., calling object.__getattribute__(self, ...) as part of the operation of your override of __getattribute__). Note that a class that overrides __getattribute__ makes attribute access on instances of the class quite slow, since your overriding code is called on every such attribute access.

Get Python in a Nutshell 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.