Python对象 @property
我正在尝试创建一个点的类,这个类里有一个叫“坐标”的属性。不过,它的表现和我预期的不太一样,我搞不清楚为什么。
class Point:
def __init__(self, coord=None):
self.x = coord[0]
self.y = coord[1]
@property
def coordinate(self):
return (self.x, self.y)
@coordinate.setter
def coordinate(self, value):
self.x = value[0]
self.y = value[1]
p = Point((0,0))
p.coordinate = (1,2)
>>> p.x
0
>>> p.y
0
>>> p.coordinate
(1, 2)
看起来 p.x 和 p.y 这两个值没有被设置,尽管设置器“应该”能把这些值设置上。有没有人知道这是为什么呢?
2 个回答
4
如果你把 Point 这个东西从对象(object)派生出来,它就能正常工作了。
class Point(object):
# ...
10
property
方法(以及它的装饰器 @property
)需要使用新式类,也就是说,这个类必须是从 object
这个类继承而来的。
比如说,
class Point:
应该改成
class Point(object):
另外,setter
属性(还有其他一些属性)是在 Python 2.6 版本中新增的。