【发布时间】:2019-06-03 20:16:44
【问题描述】:
我正在尝试从一系列调用中创建一个装饰器。语法似乎不支持。
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()
我错过了什么吗?由于某些原因,这样的东西在我的项目中非常有用。
谢谢
【问题讨论】:
-
是的,不支持该语法,它被设计得很有限。
-
你总是可以做到
f = foo().wrapper(f) -
感谢您的帮助。确实,表达的潜力完全消失了……真可惜。
标签: python decorator python-decorators