objet Python @property
-
20-09-2019 - |
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?
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