python:decorateurs
Ceci est une ancienne révision du document !
Table des matières
Décorateurs Python
Sans arguments
def decorate(func):
def wrapper(*args, **kwargs):
# Pré-traitement
response = func(*args, **kwargs)
# Post-traitement
return response
return wrapper
Exemple :
# -*- coding: utf-8 -*-
# Notre décorateur
def decorate(func):
print u"Je suis dans la fonction 'decorate' et je décore '%s.'" % func.__name__
def wrapper(*args, **kwargs):
print u"Je suis dans la fonction 'wrapper' qui accède aux arguments de '%s'." % func.__name__
a = list(args)
a.reverse()
print u"J'en donne la preuve, je peux les inverser : %s." % ', '.join(a)
print u"Exécution de la fonction '%s'." % func.__name__
response = func(*args)
print u"Je peux effectuer, ici, un post-traitement."
return response
return wrapper
# Notre fonction décorée
@decorate
def foobar(*args):
print ", ".join(args)
# Appel de la fonction
foobar("A", "B", "C", "D")
Avec arguments
def decorate(arg1, arg2, arg3):
def decorated(func):
def wrapper(*args, **kwargs):
# Pré-traitement
response = func(*args, **kwargs)
# Post-traitement
return response
return wrapper
return decorated
Exemple :
# -*- coding: utf-8 -*-
def decorate(arg1, arg2, arg3):
print u'Je suis dans la fonction "decorate".'
def decorated(func):
print u'Je suis dans la fonction "decorated".'
def wrapper(*args, **kwargs):
print u'Je suis dans la fonction "wrapper".'
print u"Les arguments du décorateurs sont : %s, %s, %s." % (arg1, arg2, arg3)
print u"Pré-traitement."
print u"Exécution de la fonction %s." % func.__name__
response = func(*args, **kwargs)
print u"Post-traitement."
return response
return wrapper
return decorated
@decorate("Arg 1", "Arg 2", "Arg 3")
def foobar():
print u"Je suis foobar, je vous reçois 5 sur 5."
foobar()
python/decorateurs.1335100770.txt.gz · Dernière modification : de root
