如何创建一个可以将多个装饰器应用于另一个函数的函数?

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