objet Python @property

voix
6

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 px et py 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?

Créé 26/08/2009 à 23:39
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
9

La propertyméthode (et par extension, le @propertydécorateur) exige une nouvelle classe de style -à- dire une classe qui les sous - classes object.

Par exemple,

class Point:

devrait être

class Point(object):

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

Créé 26/08/2009 à 23:47
source utilisateur

voix
4

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

class Point(object):
    # ...
Créé 26/08/2009 à 23:47
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more