On Sep 5, 11:47 am, Peter Otten <[EMAIL PROTECTED]> wrote: > Alexandru Moșoi wrote: > > i'm facing the following problem: > > > class Base(object): > > def __getattr__(self, attr): return lambda x: attr + '_' + x > > > def dec(callable): > > return lambda *args: 'dec_' + callable(*args) > > > class Derived(Base): > > what_so_ever = dec(Base.what_so_ever) # wrong, base doesn't have > > what_so_ever > > mumu = dec(Base.mumu) # wrong, base > > doesn't have mumu > > > any idea how to do this? > > __getattr__() is defined in the class to create instance attributes on the > fly. If you want class attributes you have to put the __getattr__() method > into the class of the class, or "metaclass": > > class Base(object): > class __metaclass__(type): > def __getattr__(self, attr): > return lambda self, x: attr + '_' + x > > def dec(callable): > return lambda *args: 'dec_' + callable(*args) > > class Derived(Base): > what_so_ever = dec(Base.what_so_ever) > > d = Derived() > print d.what_so_ever("42") > > I don't see how you can turn this into something useful... > > Peter
10x. it works. however I have another small problem. now, d.third('blah') doesn't work because instance d doesn't have 'third' attribute. I was expecting derived class to inherit the metaclass as well, but it didn't. -- http://mail.python.org/mailman/listinfo/python-list