Un décorateur est une fonction qui modifie le comportement d'autres fonctions.
Les décorateurs sont utiles lorsque l'on veut ajouter du même code à plusieurs fonctions existantes.
Créer un décorateur python
Prenons l'exemple d'une fonction qui n'a le droit d'être executée uniquement si l'utilisateur est "olivier".
# coding: utf-8 user = "olivier" def mon_decorateur(fonction): def autre_fonction(): print "Action refusée" if user <> "olivier": return autre_fonction return fonction @mon_decorateur def do_that(): print "Execution des instructions"
>>> do_that() Execution des instructions
Changeons la valeur de la variable user
.
user = "jean-louis"
Exécutons à nouveau la fonction do_that
.
>>> do_that() Action refusée
Voila, nous avons réussi à interdire l'exécution de la fonction do_that
si l'utilisateur n'est pas "olivier".
Prendre en compte les paramètres
Le décorateur peut prendre en compte les paramètres de notre fonction initiale de cette manière:
# coding: utf-8 def mon_decorateur(fonction): def autre_fonction(*param, **param2): print "Action avant .............. " fonction(*param, **param2) print "Action après .............." return autre_fonction @mon_decorateur def do_that(v): print "Execution des instructions %s" % v
Exécutons la fonction do_that
.
>>> do_that("delete") Action avant .............. Execution des instructions delete Action après ..............
Plusieurs décorateurs
Il est évidemment possible d'attribuer plusieurs décorateurs à une fonction:
@decorateur1 @decorateur2 def ma_fonction():