@property objeto Python

votos
6

Eu estou tentando criar uma classe de pontos que define uma propriedade chamada coordenar. No entanto, ele não está se comportando como eu esperava e eu não consigo descobrir o porquê.

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 px e py não estão começando o jogo por algum motivo, embora o setter devem definir esses valores. Alguém sabe por que isso é?

Publicado 26/08/2009 em 23:39
fonte usuário
Em outras línguas...                            


2 respostas

votos
9

O propertymétodo (e, por extensão, o @propertydecorador) requer uma classe de estilo novo ou seja, uma classe que subclasses object.

Por exemplo,

class Point:

deveria estar

class Point(object):

Além disso, o setteratributo (juntamente com os outros) foi adicionado em Python 2.6.

Respondeu 26/08/2009 em 23:47
fonte usuário

votos
4

Ele vai funcionar se você derivar Ponto a partir do objeto:

class Point(object):
    # ...
Respondeu 26/08/2009 em 23:47
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more