问题
I'm trying to create a point class which defines a property called "coordinate". However, it's not behaving like I'd expect and I can't figure out why.
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)
It seems that p.x and p.y are not getting set for some reason, even though the setter "should" set those values. Anybody know why this is?
回答1:
The property
method (and by extension, the @property
decorator) requires a new-style class i.e. a class that subclasses object
.
For instance,
class Point:
should be
class Point(object):
Also, the setter
attribute (along with the others) was added in Python 2.6.
回答2:
It will work if you derive Point from object:
class Point(object):
# ...
来源:https://stackoverflow.com/questions/1337935/python-object-property