Вопрос

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

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 по какой-то причине не устанавливаются, хотя установщик "должен" установить эти значения.Кто-нибудь знает, почему это происходит?

Это было полезно?

Решение

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

Например,

class Point:

должно быть

class Point(object):

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

Другие советы

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

class Point(object):
    # ...
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top