2010-02-10 15 views
7

que he visto muchos ejemplos online y in this forum de cómo crear propiedades en Python con especiales captadores y set. Sin embargo, no puedo obtener los métodos especiales getter y setter para ejecutar, ni puedo usar @property decorator para transformar una propiedad como readonly.Python 2.6.4 decoradores de propiedad que no trabaja

Estoy usando Python 2.6.4 y aquí está mi código. Se emplean diferentes métodos para usar propiedades, pero ninguno de los dos funciona.

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) 

Respuesta

21

PathInfo debe subclase objeto.

De esta manera:

class PathInfo(object): 

Propiedades trabajar solamente en nuevas clases de estilo.

+4

No solo propiedades, sino descripciones de todo tipo. –

+0

Otra opción es poner '__metaclass __ = type' en la parte superior del archivo, lo que hará que todas las clases tengan un estilo nuevo. Creo que es mejor ser explícito para cada clase a través de –

+0

O puede poner este '__metaclass__' en la clase en lugar de ponerlo en la parte superior del archivo. De esta manera solo una clase lo tendrá. – gruszczy