Объект Python @property - PullRequest
       14

Объект Python @property

6 голосов
/ 27 августа 2009

Я пытаюсь создать класс точек, который определяет свойство с именем "координата". Тем не менее, он не ведет себя так, как я ожидал, и я не могу понять, почему.

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 ]

9 голосов
/ 27 августа 2009

Метод property (и, соответственно, декоратор @property) требует класс нового стиля , т.е. класс, который подклассов object.

Например,

class Point:

должно быть

class Point(object):

Кроме того, атрибут setter (наряду с другими) был добавлен в Python 2.6.

4 голосов
/ 27 августа 2009

Это будет работать, если вы получите Point от объекта:

class Point(object):
    # ...
...