在Python中为每个实例装饰方法

| 假设我有一些简单的课程
class TestClass:
    def doSomething(self):
        print \'Did something\'
我想装饰
doSomething
方法,例如计算通话次数
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)
现在,这计算了对装饰方法的调用次数,但是我希望每个实例都有一个计数器,这样
foo1=TestClass()
foo1.doSomething()
foo2=TestClass()
foo1.doSomething.count
是1,
foo2.doSomething.count
是0。据我了解,使用装饰器是不可能的。有什么方法可以实现这种行为?     
已邀请:
        利用事实,将“ 6”(即调用该方法的对象)作为参数传递给该方法:
import functools

def counted(method):
    @functools.wraps(method)
    def wrapped(obj, *args, **kwargs):
        if hasattr(obj, \'count\'): 
            obj.count += 1
        else:
            obj.count = 1
        return method(obj, *args, **kwargs)
    return wrapped
在上面的代码中,我们将对象作为方法的修饰版本的
obj
参数拦截。装饰器的用法非常简单:
class Foo(object):
    @counted
    def do_something(self): pass
    
        ѭ10的第一个元素不是要在其上调用方法的对象吗?您不能只将计数存储在那里吗?     

要回复问题请先登录注册