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?

¿Fue útil?

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
scroll top