您不再需要提供自己的包装器,只需使用@decorator.decorator
on the inner函数,它需要一个额外的第一个位置参数,该函数被包装:
@decorator.decorator
def mydec(func, cls, *args, **kwargs):
# do some stuff
return func(cls, *args, **kwargs)
The decorator
package 不使用装饰器的闭包,而是将包装的函数作为参数传递。
Demo:
>>> @decorator.decorator
... def mydec(func, cls, *args, **kwargs):
... # do some stuff
... return func(cls, *args, **kwargs)
...
>>> class Foo(object):
... @classmethod
... @mydec
... def bar(cls, baz='test', qux=None):
... print (baz, qux)
...
>>> Foo.bar()
('test', None)