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

Publicités

0 Responses to “Programmer avec les Decorators”



  1. Laisser un commentaire

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s





%d blogueurs aiment cette page :