Disons que ma classe a beaucoup de méthodes, et je veux appliquer mon décorateur à chacune d'entre elles. Plus tard, lorsque j'ajoute de nouvelles méthodes, je veux que le même décorateur soit appliqué, mais je ne veux pas écrire @mondecorateur
au-dessus de la déclaration de la méthode à chaque fois.
Si je regarde dans __call__
, est-ce la bonne solution?
J'aimerais montrer cette méthode, qui est une solution similaire à mon problème pour quiconque trouverait cette question plus tard, en utilisant un mixin comme mentionné dans les commentaires.
class WrapinMixin(object):
def __call__(self, hey, you, *args):
print 'entrée', hey, you, repr(args)
try:
ret = getattr(self, hey)(you, *args)
return ret
except:
ret = str(e)
raise
finally:
print 'sortie', hey, repr(ret)
Ensuite, vous pouvez dans un autre
class Embrassermesmethodesautour(EnvelopperMixin):
def __call__:
return super(Embrassermesmethodesautour, self).__call__(hey, you, *args)
Note de l'éditeur : cet exemple semble résoudre un problème différent de celui posé dans la question.