Why doesnt __getattr__ with decorator dont call __get_method in decorator

Alex Martelli aleax at mac.com
Wed Mar 28 10:47:08 EDT 2007


glomde <tbrkic at yahoo.com> wrote:

> Hi,
> 
> I tried to write a decorator for that should be for methods but for
> some reasons
> it doens seem to work when you try to do it on the __getattr__ method
> in a class.
> Could anybody give some hints why this is?
...
> a.test # This doesnt call the __get__ !!!
> 
> Output
> __get__ <__main__.MyClass1 object at 0x4012baac>
> hello1
> Traceback (most recent call last):
>   File "/home/tonib/test.py", line 27, in ?
>     a.test
>   File "/home/tonib/test.py", line 12, in __call__
>     return self.func(self.instance, *args, **kwds)
> AttributeError: 'decoratorTest' object has no attribute 'instance'

What Python release are you using?  With Python 2.5, your code gives me
instead:

>>> a.test
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "a.py", line 11, in __call__
    return self.func(self.instance, *args, **kwds)
TypeError: __getattr__() takes exactly 2 arguments (3 given)
>>> 

so there would seem to be some "mis-alignment" wrt the problems you
observe...


Alex



More information about the Python-list mailing list