2010-12-19 17 views
6

Necesito una función similar a gobject.io_add_watch pero para una variable. Por ejemplo, necesita ver la variable stop inicializada en stop = False y cuando la parada se cambia a True debe llamar a una función. No puedo tener un hilo separado viendo la variable en un bucle con un time.sleep.Viendo una propiedad para cambios

¿Existe tal función o forma de hacerlo?

+2

Sólo tener '.Stop()' sería una forma más explicativa y lógica de hacerlo; "detener" es algo que haces y está desencadenando acciones que pueden ser costosas, mientras que simplemente establecer una variable es generalmente barato (me doy cuenta de que en este caso de uso la gente debería darse cuenta de lo que hará, pero el principio es válido). 'x.stop()' y 'x.start()' es más nítido que 'x.stop = True' y' x.stop = False' o 'x.running = False' y' x.running = True' o equivalentes. –

+0

Aunque mostré cómo hacerlo, estoy de acuerdo con usted en esta. Ciertamente, la técnica tiene otras aplicaciones mejores. :) –

Respuesta

17

Use un property en una clase:

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: buen caso de uso. –

+0

¡Muchas gracias increíble! – Nolhian

Cuestiones relacionadas