OK, a bit of python and Zope experimenting and I have got a little
further with this, and my understanding as to when __getattr__ is
actually called!

This gets closer to working, by calling the __getattr__ from the
Implicit base class, but could be barking up the wrong tree :

def __getattr__(self,attr):
  if name = 'foo':
    return self.foo()

  return Implicit.__class__.__getattr__(self,attr)

Except I get a 'TypeError' on the call to the Implicit getattr :

"unbound C method must be called with ExtensionClass 1st argument"

'self' inherits from Implicit, so I would have thought this would be OK.

Anyone with any thoughts/pointers?

TIA,

JB.

John Barratt wrote:
> 
> Dragging up and old topic here... But I am attempting something similar
> here with no success.
> 
> Basically I want to do something like was demonstrated (using python
> 2.1, Zope 2.5.1), but to call the 'default' __getattr__ subsequently so
> that I can put in my own handlers, before looking for 'standard' attrs
> present on this object through the normal __getattr__ method :
> 
> __oldgetattr__ = __getattr__
> def __getattr__(self, name):
>      if name = 'foo':
>          return self.foo()
> 
>      return self.__oldgetattr__(name)
> 
> However just the assigment of __oldgetattr__ gives an attribute error.
> Looking at Andrew Milton's Portable Holes product it seems a similar
> attempt to do this is made :
> 
> ...
>   try:
>     __oldgetattr__ = ObjectManager.__getattr__
>   except:
>     try:
>       __oldgetattr__ = ObjectManager.inheritedAttribute('__getattr__')
>     except:
>       def __oldgetattr__(self, name):
>         raise AttributeError, name
> ...
> 
> If I try a similar thing to this, I always end up getting the 'old' one
> being defined as just the 'raise' statement.  All other attempts to
> store the 'old' gettattr results in an attribute error.  Is this simply
> not possible with this version of python and hence the current Zope
> release?
> 
> Looks like with 2.2 you can do something like this (taken from Guido's
> presentation as OSCON 2001) :
> 
> class C(object):
>     def __getattr__(self, name):
>     if name == 'x': return ...
>         return object.__getattr__(self, name)
> 
> Thanks for any help/pointers!
> 
> JB.
> 
> Casey Duncan wrote:
> >
> > If your __getattr__ fails to find what it wants, it should raise an
> > AttributeError. This will give the ball back to the acquisition
> > machinery.
> >
> > Thusly:
> >
> > def __getattr__(self, name):
> >     if name = 'foo':
> >         return self.foo()
> >     raise AttributeError, name
> >
> > hth,
> >
> > -Casey
> >
> > On Tue, 2002-06-04 at 22:28, Erik A. Dahl wrote:
> > > Ok I need to override __getattr__ in one of my product classes.  I'm
> > > sure this is killing acquisition but not sure about the persistence
> > > stuff (I think this is working).  Is there a way to make this work?
> > >  Here is what I'm doing:
> > >
> > > def __getattr__(self, name):
> > >     if name == 'myattr':
> > >         return self.myattr()
> > >
> > >
> > > I assume that somewhere in the Acquisition code there is a __getattr__
> > > but I can't find it.  I tried calling Implicit.__getattr__ but its not
> > > there.  If some one has an example that would be great.
> > >
> > > -EAD
> > >
> > >
> > >
> > > _______________________________________________
> > > Zope-Dev maillist  -  [EMAIL PROTECTED]
> > > http://lists.zope.org/mailman/listinfo/zope-dev
> > > **  No cross posts or HTML encoding!  **
> > > (Related lists -
> > >  http://lists.zope.org/mailman/listinfo/zope-announce
> > >  http://lists.zope.org/mailman/listinfo/zope )
> >
> > _______________________________________________
> > Zope-Dev maillist  -  [EMAIL PROTECTED]
> > http://lists.zope.org/mailman/listinfo/zope-dev
> > **  No cross posts or HTML encoding!  **
> > (Related lists -
> >  http://lists.zope.org/mailman/listinfo/zope-announce
> >  http://lists.zope.org/mailman/listinfo/zope )
> 
> _______________________________________________
> Zope-Dev maillist  -  [EMAIL PROTECTED]
> http://lists.zope.org/mailman/listinfo/zope-dev
> **  No cross posts or HTML encoding!  **
> (Related lists -
>  http://lists.zope.org/mailman/listinfo/zope-announce
>  http://lists.zope.org/mailman/listinfo/zope )

_______________________________________________
Zope-Dev maillist  -  [EMAIL PROTECTED]
http://lists.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://lists.zope.org/mailman/listinfo/zope-announce
 http://lists.zope.org/mailman/listinfo/zope )

Reply via email to