2010-02-10 10 views
7

Je l'ai vu de nombreux exemples online et in this forum de la façon de créer des propriétés en Python avec getters et setters spéciaux. Toutefois, je ne parviens pas à exécuter les méthodes getter et setter spéciales. Je ne peux pas non plus utiliser le décorateur @property pour transformer une propriété en en lecture seule. J'utilise Python 2.6.4 et voici mon code. Différentes méthodes d'utilisation des propriétés sont utilisées, mais aucune ne fonctionne.Python 2.6.4 décorateurs de propriété ne fonctionne pas

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) 

Répondre

21

PathInfo doit sous-classe objet.

Comme ceci:

class PathInfo(object): 

Propriétés ne fonctionnent que sur les nouvelles classes de style.

+4

Non seulement des propriétés, mais des descripteurs de toutes sortes. –

+0

Une autre option consiste à mettre '__metaclass __ = type' en haut du fichier, ce qui rendra toutes les classes newstyle. Je pense qu'il est préférable d'être explicite pour chaque classe si –

+0

Ou vous pouvez mettre ce '__metaclass__' dans la classe au lieu de le placer en haut du fichier. De cette façon, une seule classe l'aura. – gruszczy

Questions connexes