财产装饰不是setter方法被调用

问题描述:

我试图用一个属性的方法来设置一个类实例的状态,下面的类定义:财产装饰不是setter方法被调用

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 

从结果来看,虽然,它似乎setter方法没有被执行,尽管内部变量正在被改变:

>>> 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" 

我在做什么错?

在Python 2里,你必须继承object的性质的工作:

class Result(object): 

,使之成为新式类。随着那个改变你的代码工作:

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