Programmer avec les Decorators

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_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

0 Réponses to “Programmer avec les Decorators”



  1. Laissez un commentaire

Laisser un commentaire