Método de establecimiento de decorador de propiedad no se llama

Estoy tratando de usar un método de propiedad para establecer el estado de una instancia de clase, con la siguiente definición de clase:

class Result: def __init__(self,x=None,y=None): self.x = float(x) self.y = float(y) self._visible = False self._status = "You can't see me" @property def visible(self): return self._visible @visible.setter def visible(self,value): if value == True: if self.x is not None and self.y is not None: self._visible = True self._status = "You can see me!" else: self._visible = False raise ValueError("Can't show marker without x and y coordinates.") else: self._visible = False self._status = "You can't see me" def currentStatus(self): return self._status 

De los resultados, sin embargo, parece que el método de establecimiento no se está ejecutando, aunque la variable interna se está cambiando:

 >>> res = Result(5,6) >>> res.visible False >>> res.currentStatus() "You can't see me" >>> res.visible = True >>> res.visible True >>> res.currentStatus() "You can't see me" 

¿Qué estoy haciendo mal?

En Python 2, debe heredar del object para que las propiedades funcionen:

 class Result(object): 

para que sea una clase de nuevo estilo. Con ese cambio funciona tu código:

 >>> res = Result(5,6) >>> res.visible False >>> res.visible = True >>> res.currentStatus() 'You can see me!'