Python对象 @property

6 投票
2 回答
1201 浏览
提问于 2025-04-15 13:54

我正在尝试创建一个点的类,这个类里有一个叫“坐标”的属性。不过,它的表现和我预期的不太一样,我搞不清楚为什么。

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 版本中新增的。

撰写回答