[Tutor] set/getattr and inheritance
Tue, 09 Oct 2001 15:54:49 -0700
I finally got that __getattribute__ provides behavior similar
to __getattr__, except it's *always* called, whether or not
the attribute is already in self.__dict__.
>>> class C(object):
self.value = value
return "Value: %s" % object.__getattribute__(self,arg)
>>> o = C(3)
The automatic triggering is implemented in the new universal
object, so you need to subclass object if you want this
behavior (otherwise __getattribute__ will just sit there
like an inert lump, not triggered by anything except an
Also, you don't want to invoke return self.__dict__[arg] to
return the attribute as part of the function'd definition,
as this just reinvokes __getattribute__ again in an
endlessly recursive tailspin.
Rather, call the base class version of __getattribute__,
as shown above.
This is all new with 2.2a4 -- becoming part of standard
Python of the future, but not currently accessible to
users of any final release.
I finally learned about this behavior from Guido's
PowerPoint slides available to PowerPointers at:
http://zpug.org/dc/ (from a presentation on Sept 26).