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?

War es hilfreich?

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
scroll top