【发布时间】:2020-11-22 16:22:48
【问题描述】:
假设我有一个由多个装饰器装饰的函数。
# file.py
@deco1
@deco2('param')
@deco3(
'multiple',
'long',
'params'
)
@deco4('multiple', 'params')
def foo():
"""Function foo
"""
pass
我们只是说它看起来很脏。很脏。
我希望能够做这样的事情。
# another_file.py
@deco1
@deco2('param')
@deco3(
'multiple',
'long',
'params'
)
@deco4('multiple', 'params')
def all_decorators_for_foo():
...
# file.py
from another_file import all_decorators_for_foo
@all_decorators_for_foo
def foo():
"""Yay!
"""
...
只是为了上下文,多个装饰器是 sanic 框架的 swagger 文档装饰器。
是否有可能在 python 中实现类似的功能?
This question 并没有以任何方式回答我的问题。无论如何,装饰器都可以堆叠在一起使用。我想要某种可以用来代替所有堆叠的装饰器的装饰器。
【问题讨论】:
-
这能回答你的问题吗? How to make a chain of function decorators?
-
@bigbounty 不,绝对没有。请在将其标记为重复之前阅读该问题。
-
您是否坚持将那些装饰器应用到
all_decorators_for_foo,或者您可以将它们作为参数传递给它吗? -
@superbrain 任何有用的东西。我只是想让我的代码看起来很漂亮。但我也希望能够独立地为
foo添加更多装饰器。就像我希望@deco1与foo和所有其他人一起分组一样。 -
@DiptangsuGoswami 您是否浏览了所附链接中的答案?如果没有看到这个 - stackoverflow.com/a/29163633/6849682。附加到您的问题的答案使用相同的概念 -
decor1(decor2(func))(*args, **kwargs)。所以,这可能是重复的
标签: python python-3.x decorator python-decorators