rud*_*den 8 python properties class decorator python-decorators
我试图使用属性方法来设置类实例的状态,具有以下类定义:
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"
我究竟做错了什么?
Mar*_*ers 19
在Python 2上,您必须从object属性继承才能工作:
class Result(object):
使它成为一种新式的课程.通过这种更改您的代码可以工作
>>> res = Result(5,6)
>>> res.visible
False
>>> res.visible = True
>>> res.currentStatus()
'You can see me!'
| 归档时间: | 
 | 
| 查看次数: | 2276 次 | 
| 最近记录: |