Salut
Les *decorators* sont un moyen puissant d’écrire un code élégant ,facile a maintenir
et fonctionnant comme des contrôle d’accès par niveau .Vous pouvez les utiliser pour
surcharger vos méthodes a la volée , faire des contrôles d’exécutions sur des fonctions.
Ou tout simplement , écrire du code simple et élégant.
Que cela soit sous django/python,vous trouverez toujours cette façon de programmer .
Le code ci-dessus permet a chaque fois que la fonction *my_function* est exécutée
, de lui ajouter l’argument *nom* avec la valeur *Alioune Dia*.
Vous vous demandez mais a quoi cela peut t-il servir , mais vous me remercierez plus tard 😉
def decorator_generator(**kwargs): def decorator(function): for k , v in kwargs.items() : setattr (function , k, v) return function return decorator @decorator_generator(nom = "Alioune Dia") def my_function(): print getattr(my_function, "nom") >>>my_function() Alioune Dia
L’autre moyen tout aussi beau de programmer les *decorators* est d’utiliser la fonction *__call__*
permettant aussi d’instancier une classe générateur de *decorators* , et pouvant ainsi passer
des arguments à une fonction avant de la consommer 😉
class Template: def __init__(self, **kwargs): self.kwargs = kwargs def __call__(self , function): for k , v in self.kwargs.items(): setattr (function , k, v) return function @Template(nom="Alioune Dia") def my_function(): print getattr (my_function , "nom") >>>my_function() Alioune Dia
Voila c’est tout a + 😉
def decorator(function):
for k , v in kwargs.items() :
setattr (function , k, v)
return function
return decorator
@decorator_generator(nom = « Alioune Dia »)
def my_function():
print getattr(my_function, « nom »)
>>>my_function()
Alioune Dia
0 Réponses to “Programmer avec les Decorators”