properly implementing the __getattribute__()
Carlo v. Dango
oest at soetu.eu
Tue Oct 7 04:07:58 EDT 2003
More information about the Python-list mailing list
Tue Oct 7 04:07:58 EDT 2003
- Previous message (by thread): Wavelet package available?
- Next message (by thread): properly implementing the __getattribute__()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Tue, 07 Oct 2003 09:34:27 +0200, Peter Otten <__peter__ at web.de> wrote: Many thanks for your quick reply! With disbelief i watched how your code worked and mine didn't! Then I tried running my code with the -tt flag, which revealed a problem with a mix of spaces and tabs :-( Solving that made my code work as well! Sigh... this sort of problem is something one really has to get used to! -Carlo > Carlo v. Dango wrote: > >> hello there. I have a hard time implementing __getattribute__ properly. >> I >> know I should stay away from that method, but Im doing some low-level >> changes to the dispatching and method-lookup, so I really don't have a >> choice ;-) >> >> the following code >> >> class Foo(object): >> def __init__(self): >> self.name = "hans" >> >> def foo(self): >> print "foo" >> >> class Bar(Foo): >> def info(self): >> print self.name >> >> >> b = Bar() >> print dir(b) >> print b.__dict__ >> >> results in >> >> [..., 'foo', 'info', 'name'] >> {'name': 'hans'} >> >> >> >> But when I implement a simple __getattribute__ >> >> class Foo(object): >> def __getattribute__(self, name): return >> object.__getattribute__(self, >> name) >> >> def __init__(self): >> self.name = "hans" >> >> def foo(self): >> print "foo" >> >> class Bar(Foo): >> def info(self): >> print self.name >> >> b = Bar() >> print dir(b) >> print b.__dict__ >> >> >> I get >> >> [..., 'info'] >> {} >> >> >> so the method and the field decl of the super type is now gone :( And >> worse.. if i do a "b.foo()" it fails with the error AttributeError: >> 'Bar' >> object has no attribute 'foo' >> >> I'm completely lost >> >> Suggestions are deeply appreciated... >> >> -Carlo v. Dango > > It works as expected here on Linux with both Python 2.2.1 and 2.3 > > class Foo(object): > def __getattribute__(self, name): > return object.__getattribute__(self, name) > > def __init__(self): > self.name = "hans" > > def foo(self): > print "foo" > > class Bar(Foo): > def info(self): > print self.name > > def dir2(obj): > default = dir(object()) > return [n for n in dir(obj) if not n in default] > > b = Bar() > print dir2(b) > # ['__dict__', '__module__', '__weakref__', 'foo', 'info', 'name'] > > print b.__dict__ > # {'name': 'hans'} > > Maybe you are accidentally calling some old version of you test program? > > Peter > -- Using M2, Opera's revolutionary e-mail client: http://www.opera.com/m2/
- Previous message (by thread): Wavelet package available?
- Next message (by thread): properly implementing the __getattribute__()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list