[Zope-dev] How to override __getattr__ and not break acquisition

Steve Alexander steve@cat-box.net
Wed, 05 Jun 2002 08:33:25 +0100


Erik A. Dahl wrote:
> Ok I need to override __getattr__ in one of my product classes.  I'm 
> sure this is killing acquisition

yes

> but not sure about the persistence 
> stuff (I think this is working).

it will still work

>  Is there a way to make this work? 

yes

> Here  is what I'm doing:
> 
> def __getattr__(self, name):
>    if name == 'myattr':
>        return self.myattr()

if your return value knows about acquisition, you need to it by calling 
__of__:

  def __getattr__(self, name):
     if name == 'myattr':
         return self.myattr().__of__(self)


> I assume that somewhere in the Acquisition code there is a __getattr__ 
> but I can't find it.

it is implemented in C.


--
Steve Alexander