[Zope-dev] __getattr__ revisited
Shane Hathaway
shane@zope.com
Wed, 16 Apr 2003 16:17:40 -0400
Johan Carlsson [EasyPublisher] wrote:
>
> Hi,
> I just read an old thread about overriding __getattr__ without
> breaking acquisition.
> Using Implicit.inheritedAttributes('__getattr__') didn't work, and I'm not
> sure if using Implicit.__class__.__getattr__ even gives me the correct
> __getattr__?
>
> Anyway I found a way around this using __dict__ explicitly.
> In the __of__ wrapper I save the parent:
> self.__dict__['_v_parent']=parent
>
> and in the end of __getattr__ I put
>
> if self.__dict__.has_key('_v_parent'):
> return getattr(self.__dict__['_v_parent'], name)
>
> It seams to work, but I just want to check for any problems with this
> approach.
Hmm, you might not need to do all of that. The acquisition wrapper
first consults your __getattr__(). If your __getattr__() raises an
AttributeError, the acquisition wrapper continues its search for the
attribute along the normal acquisition chain. All you have to do is
raise AttributeError, which you should do anyway.
Shane