Question

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?

Was it helpful?

Solution

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.

OTHER TIPS

It will work if you derive Point from object:

class Point(object):
    # ...
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top