Pitone oggetto @property
-
20-09-2019 - |
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 è?
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