Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
decorateurs_modeles [2012/03/26 17:55] tyrtamos |
decorateurs_modeles [2012/03/26 18:08] (Version actuelle) tyrtamos |
||
---|---|---|---|
Ligne 307: | Ligne 307: | ||
==== Décorateurs avec arguments ==== | ==== Décorateurs avec arguments ==== | ||
- | Même chose que le décorateur précédent, | + | Même chose que le décorateur précédent, |
+ | |||
+ | Par rapport aux code habituellement présenté comme modèle, j' | ||
<code python> | <code python> | ||
class decorateur(object): | class decorateur(object): | ||
""" | """ | ||
+ | | ||
+ | adr = {} | ||
+ | | ||
def __init__(self, | def __init__(self, | ||
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, | def __call__(self, | ||
@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 | ||
</ | </ | ||
Ligne 339: | Ligne 349: | ||
La ligne @functools.wraps(fonc) permet à la fonction décorée de conserver son nom (%%__name__%%) et son docstring (%%__doc__%%). | La ligne @functools.wraps(fonc) permet à la fonction décorée de conserver son nom (%%__name__%%) et son docstring (%%__doc__%%). | ||
- | **Exemple d'utilisation:** | + | On lance l'exécution de la méthode ' |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
+ | <code python> | ||
+ | decorateur.adr[' | ||
+ | </ | ||
De même que le décorateur sans argument, ça marche aussi pour décorer la méthode d'une classe: | De même que le décorateur sans argument, ça marche aussi pour décorer la méthode d'une classe: |