2013-06-21 21 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

我喜歡這個裝飾,謝謝。 –

相關問題