2010-02-10 4 views
7

ich viele Beispiele gesehen habe online und in this forum, wie mit speziellen Getter und Setter Eigenschaften in Python zu erstellen. Allerdings kann ich die speziellen Getter- und Setter-Methoden nicht ausführen, noch kann ich den @property Dekorator verwenden, um eine Eigenschaft als readonly zu transformieren.Python 2.6.4 Eigenschaft Dekorateure nicht funktioniert

Ich benutze Python 2.6.4 und hier ist mein Code. Es werden verschiedene Methoden zum Verwenden von Eigenschaften verwendet, aber keine funktionieren.

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) 

Antwort

21

PathInfo muss Objekt Unterklasse.

So:

class PathInfo(object): 

Eigenschaften funktionieren nur auf neuen Stil Klassen.

+4

Nicht nur Eigenschaften, sondern Deskriptoren aller Art. –

+0

Eine weitere Option ist, __metaclass __ = type am Anfang der Datei zu setzen, wodurch alle Klassen newstyle werden. Ich denke, es ist besser, für jede Klasse explizit zu sein, obwohl –

+0

Oder Sie können diese "__metaclass__" in die Klasse setzen, anstatt sie an den Anfang der Datei zu setzen. So wird es nur eine Klasse haben. – gruszczy