Ce que vous êtes désireux de le faire n'est pas possible. Prenez, par exemple, de savoir si ou non le code ci-dessous est valide:
class Test(object):
def _decorator(self, foo):
foo()
def bar(self):
pass
bar = self._decorator(bar)
Elle, bien sûr, n'est pas valide puisqu' self
n'est pas défini à ce stade. Il en va de même pour l' Test
qu'il ne sera pas défini jusqu'à ce que la classe elle-même est définie (ce qui son dans le processus d'). Je vous montre cet extrait de code, parce que c'est ce que votre décorateur d'extrait de transforme en.
Donc, comme vous pouvez le voir, l'accès à l'instance dans un décorateur, comme ce n'est pas vraiment possible, car les décorateurs sont appliquées lors de la définition de ce que la fonction/méthode qu'ils y sont attachés, et non lors de l'instanciation.
Si vous avez besoin de la classe au niveau de l'accès, essayez ceci:
class Test(object):
@classmethod
def _decorator(cls, foo):
foo()
def bar(self):
pass
Test.bar = Test._decorator(Test.bar)