简体   繁体   English

来自链式调用的Python装饰器

[英]Python decorator from chained calls

I am trying to create a decorator from a chain of calls. 我正在尝试从一系列调用中创建一个装饰器。 It does not seem to be supported by syntax. 它似乎不受语法支持。

from functools import wraps


class Bar:
    def wrapper(self):
        def _outer(fun):
            @wraps(fun)
            def _f(*a, **kw):
                print('I am in decorator')
                return fun(*a, **kw)
            return _f
        return _outer


def foo():
    return Bar()


# @foo().wrapper()  # Invalid syntax
# def f():
#     pass


# @(foo().wrapper())  # Invalid syntax
# def f():
#     pass


def f():
    pass


f = foo().wrapper()(f)
f()

Am I missing something? 我错过了什么吗? For some reasons, such a thing would be extremely useful in my project. 出于某些原因,这样的事情在我的项目中非常有用。

Thanks 谢谢

You could do this: 你可以这样做:

wrapper = foo().wrapper()

@wrapper
def foo():
  pass

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM