Załóżmy Mam prostą klasęDekoracje metody na przykład w Pythonie
class TestClass:
def doSomething(self):
print 'Did something'
chciałbym ozdobić metodę doSomething
, na przykład policzyć liczbę połączeń
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)
Teraz ten zlicza liczba wywołań do metody dekorowanej, jednak chciałbym mieć licznik na wystąpienie, taki, że po
foo1=TestClass()
foo1.doSomething()
foo2=TestClass()
foo1.doSomething.count
to 1, a foo2.doSomething.count
to 0. Z tego co rozumiem, nie jest to możliwe przy użyciu dekoratorów. Czy jest jakiś sposób na osiągnięcie takiego zachowania?
Tak, myślę, że byłoby to możliwe. Ale wydaje mi się to nieoptymalnym projektem, ponieważ dekorator będzie polegał na właściwościach klasy, z której jest ona używana, co utrudnia jej użycie. – Christoph