8

I am trying to use a property method to set the status of a class instance, with the following class definition:

class Result: def __init__(self,x=None,y=None): self.x = float(x) self.y = float(y) self._visible = False self._status = "You can't see me" @property def visible(self): return self._visible @visible.setter def visible(self,value): if value == True: if self.x is not None and self.y is not None: self._visible = True self._status = "You can see me!" else: self._visible = False raise ValueError("Can't show marker without x and y coordinates.") else: self._visible = False self._status = "You can't see me" def currentStatus(self): return self._status 

From the results though, it seems that the setter method is not being executed, although the internal variable is being changed:

>>> res = Result(5,6) >>> res.visible False >>> res.currentStatus() "You can't see me" >>> res.visible = True >>> res.visible True >>> res.currentStatus() "You can't see me" 

What am I doing wrong?

0

1 Answer 1

19

On Python 2, you must inherit from object for properties to work:

class Result(object): 

to make it a new-style class. With that change your code works:

>>> res = Result(5,6) >>> res.visible False >>> res.visible = True >>> res.currentStatus() 'You can see me!' 
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.