class Decorator:
def __init__(self, method):
self.method = method
def __call__(self, *args):
print 'decorator-class arguments: ', args
return self.method(*args)
def decorator(method):
def inner(*args):
print 'decorator-function arguments: ', args
return method(*args)
return inner
class My:
def test(self, i):
return i+1
obj = My()
print obj.test(100)
decorator-function arguments: (<__main__.My instance at 0x01D1D878>, 100)
101
Если метод test декорировать классом Decorator, то результат будет такой:
decorator-class arguments: (100,)
Traceback (most recent call last):
File "C:\Users\dima\Documents\NetBeansProjects\db\src\decorators.py", line 42, in <module>
print m.test(100)
File "C:\Users\dima\Documents\NetBeansProjects\db\src\decorators.py", line 9, in __call__
return self.method(*args)
TypeError: test() takes exactly 2 arguments (1 given)
Почему? это баг?