une méthode qui sert de décorateur
Bonjour,
j'aimerais savoir s'il est possible d'utiliser une méthode pour décorer une autre méthode.
Voici un bout de code (d'exemple, mon vrai code est + compliqué) pour éclaircir mon truc :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Spam :
def __init__(self,verbose):
self.verbose = verbose
self.name = 'Spam'
def deco ( self,func ):
if self.verbose: # NB j'accède au self de l'instance
def sub ( *k,**a ):
print 'entering',self.name
return func( *k,**a ) # execute la methode
else:
def sub ( *k,**a ):
return func( *k,**a ) # execute la methode
return sub
@deco
def eggs (self,x):
return x+1
s = Spam(True)
x = s.eggs(5) |
Voici le code que j'imagine pour mon cas, mais ça ne compile pas : "deco() takes exactly 2 arguments (1 given)"
J'ai essayé toutes sortes de solutions de contournement, mais rien ne passe...
(déclarer deco en @staticmethod, décorer eggs avec @self.deco, etc.)
Bien sûr, je pourrais déclarer deco comme une fonction en dehors de Spam, mais ce serait moche car le code de deco est très lié à la classe Spam (ici, j'ai mis un code rikiki pour l'exemple)...
Attention : ce bout de code est là pour l'exemple... le but n'est pas de trouver comment faire marcher cet exemple, mais de trouver comment accéder au self de l'instance dans le décorateur.
Si quelqu'un a une idée...
merci d'avance !