制作一个多个装饰器

时间:2014-01-18 22:29:58

标签: python decorator python-decorators

说,我有类似的东西:

@decorator1
@decorator2
def myfunc()
   # ....

如何声明一个新的装饰器both_decorators,它将按顺序调用decorator1decorator2,基本上将它作为别名?所以我可以写一下:

@both_decorators
def myfunc()
   # ....

在许多情况下,当多个装饰器以相同的方式使用时,我们的想法是保存输入。

2 个答案:

答案 0 :(得分:5)

简单:

def both_decorators(func):
    return decorator1(decorator2(func))

因为那是所有装饰者的确如此。

答案 1 :(得分:1)

是的,你可以。有点像:

def both_decorators(*decs):
    def decorator(dc):
        for dec in reversed(decs):
            dc = dec(dc)
        return dc
    return decorator

然后您需要做的就是添加它们

@both_decorators(decorator1, decorator2)
def myfunc():
    #something happening here.

我个人更喜欢这个,因为你可以选择你想要的装饰器,而不是。