-1

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

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

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'.")

在这个简单的示例中,设置器“setx”确保只能将正值分配给属性 self.__x。到目前为止,一切都很好。然而,在查看这段代码时,我开始怀疑是否可以使用类本身的属性。例如,我想知道是否可以有以下构造函数:

def __init__(self):
    self.x = None

为了从构造函数中直接调用 setter,以确保将属性 self.__x 设置为有效值。更进一步,我想知道我是否可以在课堂上的其他任何地方做同样的事情(getter 和 setter 本身明显例外)。如果是这样,这是否被认为是良好的编程习惯?如果没有,有什么替代方案?我真的很困惑。

谢谢!

4

1 回答 1

0

我开始想知道我是否可以使用类本身的属性。

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

def __init__(self):
    self.x = None

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

于 2013-10-26T22:07:35.227 回答