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 :Voici le code que j'imagine pour mon cas, mais ça ne compile pas : "deco() takes exactly 2 arguments (1 given)"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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)
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 !
Partager