Search code examples
pythonnew-style-class

Python object @property


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?


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.