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 Dernière révision Les deux révisions suivantes | ||
decorateurs_modeles [2012/03/26 08:22] tyrtamos |
decorateurs_modeles [2012/03/26 18:04] tyrtamos |
||
---|---|---|---|
Ligne 229: | Ligne 229: | ||
class tempsexecmoyen(object): | class tempsexecmoyen(object): | ||
""" | """ | ||
+ | |||
def __init__(self, | def __init__(self, | ||
self.fonc = fonc | self.fonc = fonc | ||
Ligne 234: | Ligne 235: | ||
self.tt = 0 # temps total cumulé | self.tt = 0 # temps total cumulé | ||
functools.wraps(fonc)(self) | functools.wraps(fonc)(self) | ||
+ | |||
+ | def __get__(self, | ||
+ | """ | ||
+ | return types.MethodType(self, | ||
+ | |||
def __call__(self, | def __call__(self, | ||
""" | """ | ||
Ligne 243: | Ligne 249: | ||
print u" | print u" | ||
return result | return result | ||
+ | |||
+ | def resultat(self): | ||
+ | """ | ||
+ | if self.c == 0: | ||
+ | tm = 0 | ||
+ | else: | ||
+ | tm = self.tt/ | ||
+ | return c, tm | ||
+ | |||
@tempsexecmoyen | @tempsexecmoyen | ||
Ligne 269: | Ligne 284: | ||
#Temps moyen: 0.0003946 | #Temps moyen: 0.0003946 | ||
#4536 | #4536 | ||
+ | </ | ||
+ | |||
+ | J'ai ajouté la méthode ' | ||
+ | |||
+ | <code python> | ||
+ | print calcul.resultat() | ||
</ | </ | ||
Ligne 286: | 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 302: | 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 | ||
</ | </ | ||