[EMAIL PROTECTED] wrote: > Hi, > > I have a container class A and I want to add functionality to it by > using a decorator class B, as follows: > > class A(object): > def __len__(self): > return 5 > > class B(object): > def __init__(self, a): > self._a = a > > def __getattr__(self, attr): > return getattr(self._a, attr) > > def other_methods(self): > blah blah blah > > I was expecting len(B) to return 5 but I get > AttributeError: type object 'B' has no attribute '__len__' > instead. > I was expecting len() to call B.__len__() which would invoke > B.__getattr__ to call A.__len__ but __getattr__ is not being called. > I can work around this, but I am curious if anyone knows _why_ > __getattr__ is not being called in this situation. > > Thanks > Tim >
The why part is that __len__ is an unbound method of the class, not an unbound method of the class's metaclass. Also, your code above makes absolutely no association between classes A and B, which is the most fundamental reason. James -- James Stroud UCLA-DOE Institute for Genomics and Proteomics Box 951570 Los Angeles, CA 90095 http://www.jamesstroud.com -- http://mail.python.org/mailman/listinfo/python-list