2010-12-19 8 views
6

Potrzebuję funkcji podobnej do funkcji gobject.io_add_watch, ale dla zmiennej. Na przykład musi obejrzeć zmienną stop zainicjowaną na stop = False, a kiedy zatrzymanie zostanie zmienione na True, musi wywołać funkcję. Nie mogę mieć oddzielnego wątku obserwującego zmienną w pętli z parametrem time.sleep.Obserwowanie właściwości zmian

Czy istnieje taka funkcja lub sposób na zrobienie tego?

+2

Tylko o '.Zatrzymaj()' byłaby bardziej objaśniający i logiczny sposób to zrobić; "stop" jest czymś, co robisz i wywołuje działania, które mogą być kosztowne, podczas gdy samo ustawienie zmiennej jest ogólnie tanie (zdaję sobie sprawę, że w tym przypadku ludzie powinni zdawać sobie sprawę z tego, co zrobi, ale zasada jest taka sama). 'x.stop()' i 'x.start()' jest krótszy niż 'x.stop = True' i' x.stop = False' lub 'x.running = False' i' x.running = True' lub odpowiedniki. –

+0

Mimo że pokazałem, jak to zrobić, zgadzam się z tobą w tej sprawie. Z pewnością technika ma inne, lepsze zastosowania. :) –

Odpowiedz

17

Użyj property w klasie:

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: ładne etui. –

+0

Niesamowite dzięki bardzo! – Nolhian

Powiązane problemy