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)
Non seulement des propriétés, mais des descripteurs de toutes sortes. –
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 –
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