属性装饰器的设置方法未被调用
我正在尝试使用一个属性方法来设置一个类实例的状态,下面是我的类定义:
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
但是从结果来看,似乎设置器方法并没有被执行,尽管内部变量的值是有改变的:
>>> 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"
我哪里做错了呢?
1 个回答
19
在Python 2中,你必须从object
继承,这样属性才能正常工作:
class Result(object):
这样做是为了让它成为一种新式类。只要做了这个改动,你的代码就能正常运行了:
>>> res = Result(5,6)
>>> res.visible
False
>>> res.visible = True
>>> res.currentStatus()
'You can see me!'