Question

Je suis en train de créer une classe de points qui définit une propriété appelée « coordonner ». Cependant, il ne se comporte comme je pense et je ne peux pas comprendre pourquoi.

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)

Il semble que p.x et p.y ne sont pas fixés pour se une raison quelconque, même si le poseur « devrait » définir ces valeurs. Quelqu'un sait pourquoi il en est?

Était-ce utile?

La solution

La méthode property (et par extension, le décorateur @property) nécessite une nouvelle classe de style -à-dire une classe qui sous-classes object.

Par exemple,

class Point:

doit être

class Point(object):

En outre, l'attribut setter (avec les autres) a été ajouté en Python 2.6.

Autres conseils

Il ne fonctionnera que si vous dérivez point de l'objet:

class Point(object):
    # ...
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top