Python object @свойство
-
20-09-2019 - |
Вопрос
Я пытаюсь создать класс 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):
# ...
Не связан с StackOverflow