2013-06-21 25 views
0

I asked sometime以前,但这个问题更复杂。我有类和实例调用实例方法的实例。例如:如何通过调用实例的方法来增加和减少计数器?

class A(object): 

    __COUNTER = 0 

    def method_1(self): 
     ... 

    def method_2(self): 
     ... 

    def method_N(self): 
     ... 

inst = A() 
# call at one module 
inst.method_1() 
# call at other module 
inst.method_N() 

当方法被调用,我需要增加一个计数器__COUNTER,但方法工作,我需要减少计数器。实例初始化为__init__.py,并在某些模块中导入。

有人可以帮我吗?

谢谢!

+1

你是说计数器应该在执行方法时递增,然后再递减?从我以前的答案我的装饰解决方案可以做到这一点;而不是'return method(....)'你做'retval = method(....); self._COUNTER - = 1;返回retval'。 –

+0

是的,你是对的! –

+0

我在班上有很多功能。有没有懒惰的决定,看自己调用方法,并应用增加和减少? –

回答

0

调整我的装饰的号召后再次递减计数器:

def increment_counter(method): 
    def wrapper(self, *args, **kw): 
     self._COUNTER += 1 
     try: 
      return method(self, *args, **kw) 
     finally: 
      self._COUNTER -= 1 
    return wrapper 

finally块将总是被调用,即使该方法会导致抛出异常。

+0

我喜欢这个装饰,谢谢。 –

相关问题