Avec encore un autre décorateur!
def yad(decorators):
def decorator(f):
for d in reversed(decorators):
f = d(f)
return f
return decorator
Exemple d'utilisation
list_of_decorators = [foo, bar]
@yad(list_of_decorators)
def foo():
print 'foo'
Sans la syntaxe de décorateur, il ressemblerait
func = yad(list_of_decorators)(func)
Si vous voulez appliquer la même liste à plusieurs fonctions, vous pouvez le faire comme:
dec = yad(list_of_decorators)
func1 = dec(func1)
@dec
def func2():
pass
Comme les points récursifs dans les commentaires, vous pouvez définir yad
(je suis sûr qu'il y a un meilleur nom pour cela) pour accepter *decorators
au lieu de decorators
. Ensuite, vous n'avez pas besoin d'utiliser des crochets si vous créez la liste in situ. La façon dont j'ai démontré est préférable si la liste est créée ailleurs.
"on peut supposer que"? Vraiment? Basé sur quoi? Qu'est-ce qui vous amène à cette conclusion? –
@ S.Lott Parce que c'est Python? Mon hypothèse générale est que je peux faire à peu près tout ce que je veux. – aaronasterling
@aaronasterling, je pense que vous confondez Python avec le langage informatique mythique [DWIM] (http://en.wikipedia.org/wiki/DWIM). – martineau