Sto provando a creare una classe di punti che definisce una proprietà chiamata "coordinate". Tuttavia, non si comporta come mi aspetterei e non riesco a capire perché.Python object @property
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 è?
Si sta utilizzando Python 2.6+? –
Cosa succede se provate a stampare 'p.coordinate' subito dopo aver istanziato l'oggetto, prima di provare a cambiarlo? –
Questo è un gotcha old-style-classes-vs-new-style-classes e potreste aspettarvi sia 'property()' che l'IDE lo catturerebbe. – smci