2010-12-19 178 views
6

我需要一個類似於gobject.io_add_watch但函數變量的函數。例如,它需要將變量stop初始化爲stop = False,當停止變爲True時,它必須調用一個函數。我不能有一個單獨的線程在time.sleep循環中觀察變量。觀察屬性的變化

有沒有這樣的功能或方法來做到這一點?

+2

只要有'.stop()'會做這件事的多個解釋和邏輯的方式; 「stop」是你做的事情,它觸發的行爲可能很昂貴,而設置一個變量通常很便宜(我意識到在這個用例中人們應該意識到它會做什麼,但是這個原則是成立的)。 'x.stop()'和'x.start()'比'x.stop = True'和'x.stop = False'或'x.running = False'和'x.running = True'或等價物。 – 2010-12-19 06:52:16

+0

即使我展示瞭如何做到這一點,我也同意你的看法。當然,這項技術還有其他更好的應用。 :) – 2010-12-19 11:57:43

回答

17

一類使用property

class Stopwatch(object): 
    def __init__(self, callback): 
     self._stop = False 
     self.callback = callback 

    @property 
    def stop(self): return self._stop 

    @stop.setter 
    def stop(self, value): 
     self._stop = value 
     if value: self.callback() 
+0

+1:不錯的使用案例。 – 2010-12-19 06:31:45

+0

非常感謝! – Nolhian 2010-12-19 06:48:46