How do I use the python-decorator package to decorate classmethods?

梦想的初衷 提交于 2019-12-04 12:57:44

You do not need to provide your own wrapper anymore, just use @decorator.decorator on the inner function, which takes one extra first positional argument, the function wrapped:

@decorator.decorator
def mydec(func, cls, *args, **kwargs):
    # do some stuff
    return func(cls, *args, **kwargs)

The decorator package doesn't use a closure for decorators and instead passes in the wrapped function as an argument.

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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!