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 ```