从类中访问python属性

时间:2013-10-26 21:45:58

标签: python

我是Python属性的新手。我想使用它们来创建一个“setter”,以确保在设置相应的属性时属性值在其允许的范围内。

我发现的典型用法示例如下:

class C(object):
    def __init__(self):
        self.__x = None
    def getx(self):
        print "+++ getx()"
        return self.__x
    def setx(self, v):
        if (v > 0):
            print "+++ setx({0})".format(v)
            self.__x  =  v
    def delx(self):
        print "+++ delx()"
        del self.__x
    x = property(getx, setx, delx, "Me property 'x'.")

在这个简单的例子中,setter“setx”确保只能将正值赋给属性self .__ x。到现在为止还挺好。但是,在查看此代码时,我开始想知道是否可以在类本身中使用属性。例如,我想知道我是否可以使用以下构造函数:

def __init__(self):
    self.x = None

为了从构造函数中获取正确的setter,以确保将属性self .__ x设置为有效值。再往前走一点,我想知道我是否可以在课堂上的其他地方做同样的事情(明显的例外是getter和setter本身)。如果是这样,这被认为是良好的编程习惯吗?如果没有,有什么替代品?我对此感到很困惑。

谢谢!

1 个答案:

答案 0 :(得分:0)

  

我开始想知道我是否可以在课堂上使用属性   本身。

是的,你可以在构造函数中使用setter / getter

def __init__(self):
    self.x = None

这很好(尽管在这种特殊情况下它会失败,因为None > 0 == False,您可能希望通过日志报告或引发异常的条件)。可能有理由不想在构造函数中使用访问器。例如,如果它们需要在构造函数中执行时无用的昂贵操作(例如延迟加载,如延迟实际初始化直到真正需要它)。