Decorate métodos por instância em Python
Suponha que eu tenha uma classe simples
class TestClass:
def doSomething(self):
print 'Did something'
Gostaria de decorar odoSomething
, por exemplo, para contar o número de chamadas
class SimpleDecorator(object):
def __init__(self,func):
self.func=func
self.count=0
def __get__(self,obj,objtype=None):
return MethodType(self,obj,objtype)
def __call__(self,*args,**kwargs):
self.count+=1
return self.func(*args,**kwargs)
Agora, isso conta o número de chamadas para o método decorado, no entanto, eu gostaria de ter um contador por instância, de modo que depois de
foo1=TestClass()
foo1.doSomething()
foo2=TestClass()
foo1.doSomething.count
é 1 efoo2.doSomething.count
é 0. Pelo que entendi, isso não é possível usando decoradores. Existe alguma maneira de alcançar esse comportamento?