decorating container types (Python 2.4)

timaranz at timaranz at
Thu Oct 11 23:42:56 CEST 2007


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__'
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.


More information about the Python-list mailing list