Python 2.6.4 属性装饰器无法使用

7 投票
1 回答
2763 浏览
提问于 2025-04-15 19:07

我在网上和这个论坛上看到很多关于如何在Python中创建带有特殊获取器设置器的属性的例子。可是,我却无法让这些特殊的获取器和设置器方法正常运行,也无法使用@property装饰器把一个属性变成只读

我使用的是Python 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)

1 个回答

22

PathInfo 必须是 object 的子类。

像这样:

class PathInfo(object):

属性只在新式类中有效。

撰写回答