С еще одним декоратором!
def yad(decorators):
def decorator(f):
for d in reversed(decorators):
f = d(f)
return f
return decorator
пример использования
list_of_decorators = [foo, bar]
@yad(list_of_decorators)
def foo():
print 'foo'
Без синтаксиса декоратора это выглядело бы как
func = yad(list_of_decorators)(func)
Если вы хотите применить один и тот же список к нескольким функциям, вы можете сделать это следующим образом:
dec = yad(list_of_decorators)
func1 = dec(func1)
@dec
def func2():
pass
В качестве рекурсивных замечаний в комментариях вы можете определить yad
(я уверен, что для этого есть более подходящее название), чтобы принять *decorators
вместо decorators
. Тогда вам не нужно использовать скобки, если вы создаете список in situ . Способ, который я продемонстрировал, лучше, если список создается в другом месте.