Domanda

Sto cercando di creare una classe punto che definisce una proprietà chiamata "punto". Tuttavia, non è comportarsi come mi aspetto e non riesco a capire perché.

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)

Sembra che p.x e p.y non sono sempre impostati per qualche motivo, anche se il setter "dovrebbe" impostare questi valori. Qualcuno sa perché questo è?

È stato utile?

Soluzione

Il metodo property (e, per estensione, il decoratore @property) richiede una classe di nuovo stile vale a dire una classe che le sottoclassi object.

Per esempio,

class Point:

dovrebbe essere

class Point(object):

Inoltre, l'attributo setter (insieme alle altre) è stata aggiunta in Python 2.6.

Altri suggerimenti

Si lavorerà se si deriva da Point oggetto:

class Point(object):
    # ...
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top