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 )