6

我正在尝试创建一个点类,它定义了一个名为“坐标”的属性。但是,它的行为不像我期望的那样,我不知道为什么。

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)

似乎 px 和 py 出于某种原因没有设置,即使设置器“应该”设置这些值。有人知道这是为什么吗?

4

2 回答 2

10

property方法(以及通过扩展,@property装饰器)需要一个新样式的类,即子类的类object

例如,

class Point:

应该

class Point(object):

此外,该setter属性(以及其他属性)是在 Python 2.6 中添加的。

于 2009-08-26T22:47:45.880 回答
4

如果您从对象派生 Point ,它将起作用:

class Point(object):
    # ...
于 2009-08-26T22:47:46.893 回答