来自链式调用的 Python 装饰器

标签 python decorator python-decorators

我正在尝试从一系列调用中创建一个装饰器。它似乎不受语法支持。

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()

我错过了什么吗?由于某些原因,这样的东西在我的项目中会非常有用。

谢谢

最佳答案

你可以这样做:

wrapper = foo().wrapper()

@wrapper
def foo():
  pass

关于来自链式调用的 Python 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56433994/

相关文章:

python - 预期 TensorFlow 计算,发现内在

python - 单个列表元素的属性 setter

python - 如何从python中的JSON文件中选择数据?

Python将表转换为字典

c# - 将装饰器模式应用于表单

python - 如何制作一个虚拟的什么都不做的@jit 装饰器?

java - 如何使用 sed 或 awk 编辑很长的 Java 类

python - View 中的 DJANGO 回调函数

python - 在装饰器中使用 Wraps 时会出现 TypeError

python - 有没有办法直接 "decorate"一段Python代码?