2010-02-10 13 views
7

मैं कई उदाहरण online और कैसे विशेष ही टिककर खेल और setters साथ अजगर में गुण पैदा करने की in this forum देखा है। हालांकि, मुझे निष्पादित करने के लिए विशेष गेटर और सेटर विधियां नहीं मिल सकती हैं, न ही मैं @property सजावट का उपयोग रीडोनली के रूप में बदलने के लिए कर सकता हूं।अजगर 2.6.4 संपत्ति सज्जाकार काम नहीं कर रहा

मैं पायथन 2.6.4 का उपयोग कर रहा हूं और यहां मेरा कोड है। गुणों का उपयोग करने के लिए विभिन्न विधियां नियोजित हैं, लेकिन न तो काम करते हैं।

class PathInfo: 
    def __init__(self, path): 
     self.setpath(path) 

    def getpath(self): 
     return self.__path 

    def setpath(self, path): 
     if not path: 
      raise TypeError 

     if path.endswith('/'): 
      path = path[:-1] 

     self.__path = path 
     self.dirname = os.path.dirname(path) 
     self.basename = os.path.basename(path) 
     (self.rootname, self.dext) = os.path.splitext(self.basename) 
     self.ext = self.dext[1:] 

    path = property(fget=getpath, fset=setpath) 

    @property 
    def isdir(self): 
     return os.path.isdir(self.__path) 

    @property 
    def isfile(self): 
     return os.path.isfile(self.__path) 

उत्तर

21

PathInfoवस्तु उपवर्ग चाहिए।

इस तरह:

class PathInfo(object): 

गुण नई शैली कक्षाओं पर ही काम करते हैं।

+4

न केवल गुण, बल्कि सभी प्रकार के वर्णनकर्ता। –

+0

एक और विकल्प फ़ाइल के शीर्ष पर '__metaclass __ = type' डालना है, जो सभी कक्षाओं को नया स्टाइल बना देगा। मुझे लगता है कि –

+0

हालांकि प्रत्येक वर्ग के लिए स्पष्ट होना बेहतर है या आप इसे फ़ाइल के शीर्ष पर रखने के बजाय कक्षा में '__metaclass__' डाल सकते हैं। इस तरह केवल एक वर्ग में यह होगा। – gruszczy

संबंधित मुद्दे