Probablement que j'aborde le problème de la mauvaise façon et il existe une solution plus simple, mais voici mon problème.Appelez décorateur avec la variable de classe en python
J'ai un décorateur défini comme ceci:
def my_decorator(argument):
def wrap(f):
def wrapped_f(*args, **kwargs):
.... # does something with argument
return wrapped_f
return wrap
je défini une classe qui ressemble à ceci:
class MyClass(object):
def __init__(argument):
self.argument = argument
@my_decorator(self.argument) # !this is an error!
def my_method(self):
.... # does something
clairement ce que j'ai écrit est faux parce qu'au niveau décorateur je ne peux pas l'accès self
, mais quelle est la bonne approche pour résoudre ce problème?
Je savais que j'oubliais quelque chose! Beaucoup plus facile que ce que je pensais! Merci! –
Mais comment 'self' est-il passé à' wrapped_f'? Je reçois un 'TypeError: my_method() manque 1 argument positionnel requis: 'self'. – Wtower
@Wtower Python passe automatiquement 'self' à' my_method', car 'my_method()' est une méthode d'instance de 'MyClass'. Il semble que vous décoriez une fonction régulière, qui n'obtient pas automatiquement le paramètre 'self'. – dano