Python-Objekt @property
-
20-09-2019 - |
Frage
Ich versuche, eine Punkt-Klasse zu erstellen, die eine Eigenschaft „koordinieren“ genannt definiert. Allerdings ist es verhält sich nicht wie ich erwarten würde, und ich kann nicht herausfinden, warum.
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)
Es scheint, dass p.x und p.y sind aus irgendeinem Grunde nicht Set bekommen, obwohl der Setter „sollte“, jene Werte gesetzt. Jeder weiß, warum das so ist?
Lösung
Die property
Methode (und durch Erweiterung der @property
Dekorateur) erfordert einen neuen Stil Klasse dh eine Klasse, die Unterklassen object
.
Zum Beispiel
class Point:
sollte
class Point(object):
Auch das setter
Attribut (zusammen mit den anderen) wurde in Python 2.6 hinzugefügt.
Andere Tipps
Es wird funktionieren, wenn Sie Point von Objekt ableiten:
class Point(object):
# ...
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow