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?
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!'
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With