Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
decorateurs_modeles [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


decorateurs_modeles

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Dernière révision Les deux révisions suivantes
decorateurs_modeles [2012/03/26 17:55]
tyrtamos
decorateurs_modeles [2012/03/26 18:04]
tyrtamos
Ligne 307: Ligne 307:
 ==== Décorateurs avec arguments ==== ==== Décorateurs avec arguments ====
  
-Même chose que le décorateur précédent, à part qu'on peut passer des arguments au décorateur pour déterminer son comportement devant chaque fonction décorée:+Même chose que le décorateur précédent, à part qu'on peut passer des arguments au décorateur pour déterminer son comportement devant chaque fonction décorée
 + 
 +Par rapport aux code habituellement présenté comme modèle, j'ajoute une variable de classe adr qui est un dictionnaire qui va stocker les adresses des instances. Sans cette solution (je n'en ai pas trouvé d'autres), on ne peut pas comme précédemment accéder à une méthode supplémentaire du décorateur comme 'resultat'.
  
 <code python> <code python>
 class decorateur(object): class decorateur(object):
     """ decorateur avec passage d'arguments """     """ decorateur avec passage d'arguments """
 +    
 +    adr = {}
 +    
     def __init__(self, *decargs, **deckwargs):     def __init__(self, *decargs, **deckwargs):
         self.decargs = decargs # arguments par position passés au décorateur         self.decargs = decargs # arguments par position passés au décorateur
         self.deckwargs = deckwargs # arguments par défaut passés au décorateur         self.deckwargs = deckwargs # arguments par défaut passés au décorateur
 +    
     def __call__(self, fonc):      def __call__(self, fonc): 
         @functools.wraps(fonc)         @functools.wraps(fonc)
Ligne 323: Ligne 329:
             # instructions après             # instructions après
             return result             return result
 +        self.__class__.adr[fonc.__name__] = self
         return appelfonc         return appelfonc
 +
 +    def resultat(self):
 +        pass
 </code> </code>
  
decorateurs_modeles.txt · Dernière modification: 2012/03/26 18:08 de tyrtamos