我是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本身)。如果是这样,这被认为是良好的编程习惯吗?如果没有,有什么替代品?我对此感到很困惑。
谢谢!
答案 0 :(得分:0)
我开始想知道我是否可以在课堂上使用属性 本身。
是的,你可以在构造函数中使用setter / getter
def __init__(self):
self.x = None
这很好(尽管在这种特殊情况下它会失败,因为None > 0 == False
,您可能希望通过日志报告或引发异常的条件)。可能有理由不想在构造函数中使用访问器。例如,如果它们需要在构造函数中执行时无用的昂贵操作(例如延迟加载,如延迟实际初始化直到真正需要它)。