2013-03-11 10 views
8

मैं एक संपत्ति विधि का उपयोग करने के लिए निम्न वर्ग परिभाषा के साथ, एक वर्ग उदाहरण की स्थिति निर्धारित करने के लिए कोशिश कर रहा हूँ बुलाया जा रहा है:सेटर विधि

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 

परिणाम यद्यपि से ऐसा प्रतीत होता है कि सेटर विधि को निष्पादित नहीं किया जा रहा है, हालांकि आंतरिक चर बदल दिया जा रहा है:

>>> 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" 

मैं क्या गलत कर रहा हूं?

उत्तर

19

अजगर 2 पर, आप object से गुण काम करने के लिए वारिस चाहिए:

class Result(object): 

यह एक नई शैली वर्ग बनाने के लिए। उस परिवर्तन के साथ आपका कोड काम करता है:

>>> res = Result(5,6) 
>>> res.visible 
False 
>>> res.visible = True 
>>> res.currentStatus() 
'You can see me!' 
संबंधित मुद्दे