How can I pack several decorators into one?

decorator, python

Solution

It's also possible to write a generic decorator that supports decorator chaining:

def fun1(f):
    print "fun1"
    return f

def fun2(f):
    print "fun2"
    return f

def fun3(f):
    print "fun3"
    return f

def chained(*dec_funs):
    def _inner_chain(f):
        for dec in reversed(dec_funs):
            f = dec(f)
        return f

   return _inner_chain

@fun1
@fun2
@fun3
def do_stuff():
    pass

@chained(fun1, fun2, fun3)
def do_stuff2():
    pass

all_funs = chained(fun1, fun2, fun3)

@all_funs
def do_stuff3():
    pass

Problem

I have several decorators on each function, is there a way to pack them in to one instead? ``` @fun1 @fun2 @fun3 def do_stuf(): pass ``` change to: ``` @all_funs #runs fun1 fun2 and fun3, how should all_funs look like? def do_stuf(): pass ```

Original source

Related problems