如何创建一个可以将多个装饰器应用于另一个函数的函数?
How to create a function that can apply multiple decorators to another function?
假设我有一个由多个装饰器装饰的函数。
# 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 问题没有以任何方式回答我的问题。无论如何,装饰器都可以堆叠在一起使用。我想要某种可以用来代替所有堆叠装饰器的装饰器。
是的,你可以。你可以制作另一个装饰器 returns 装饰函数,如下所示:
all_decorators_for_foo.py
def all_decorators_for_foo(func):
return deco1()(
deco2('param')(
deco3(
'multiple',
'long',
'params'
)(
deco4('multiple', 'params')(
func
)
)
)
)
然后在file.py
from another_file import all_decorators_for_foo
@all_decorators_for_foo
def foo():
pass
假设我有一个由多个装饰器装饰的函数。
# 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 问题没有以任何方式回答我的问题。无论如何,装饰器都可以堆叠在一起使用。我想要某种可以用来代替所有堆叠装饰器的装饰器。
是的,你可以。你可以制作另一个装饰器 returns 装饰函数,如下所示:
all_decorators_for_foo.py
def all_decorators_for_foo(func):
return deco1()(
deco2('param')(
deco3(
'multiple',
'long',
'params'
)(
deco4('multiple', 'params')(
func
)
)
)
)
然后在file.py
from another_file import all_decorators_for_foo
@all_decorators_for_foo
def foo():
pass