Objeto Python @Property
-
20-09-2019 - |
Pergunta
Estou tentando criar uma classe Point que define uma propriedade chamada "Coordenada". No entanto, não está se comportando como eu esperaria e 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 sendo definidos por algum motivo, mesmo que o setter "deva" definir esses valores. Alguém sabe por que isso é?
Solução
o property
método (e por extensão, o @property
decorador) requer uma aula de novo estilo ou seja, uma classe que subclasse object
.
Por exemplo,
class Point:
deveria estar
class Point(object):
Também o setter
O atributo (junto com os outros) foi adicionado no Python 2.6.
Outras dicas
Funcionará se você derivar o ponto do objeto:
class Point(object):
# ...
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow