Python objeto @property
-
20-09-2019 - |
Pregunta
Estoy tratando de crear una clase de punto que define una propiedad denominada "coordinar". Sin embargo, no se está comportando como yo esperaría y no puedo entender por qué.
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)
Parece que p.x y p.y no se establecen por alguna razón, a pesar de que el colocador "debe" fijar esos valores. Alguien sabe qué es esto?
Solución
El método property
(y por extensión, el decorador @property
) requiere una clase de nuevo estilo es decir, una clase que subclases object
.
Por ejemplo,
class Point:
debería ser
class Point(object):
Además, se añadió el atributo setter
(junto con los otros) en Python 2.6.
Otros consejos
Se trabajará si usted deriva Punto de objeto:
class Point(object):
# ...
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow