我是Python属性的新手。我想要使用它们来创建一个“setter”,以确保在设置相应属性时属性值在其允许的范围内。我在类中访问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”确保只有正值可以被分配给该属性自.__ X。到现在为止还挺好。但是,在查看这段代码时,我开始想知道是否可以使用类中的属性。例如,我不知道如果我能有下面的构造:
def __init__(self):
self.x = None
,以获得从构造方法中权称为setter方法,以确保属性自.__ X被设置为一个有效的值。再进一步,我想知道我是否可以从班上的其他任何人那里做同样的事情(除了吸气器和制动器本身之外)。如果是这样,这是不是很好的编程习惯?如果不是,还有什么替代方案?我对此很困惑。
谢谢!
从类内部或外部访问属性没有什么区别(并且在python解释器中尝试这样做比写这个问题花费的时间少)。如果你想知道访问属性或实际属性是否更好,这可能取决于具体的用例 - 在你的例子中,用'self.x = None'替换'self .__ x = None'是没有意义的因为setter只将值设置为> 0和'None> 0 == False'。 – l4mpi
感谢您的回复。在提交问题之前,我确实尝试了这一点,并且看到它的工作原理,但是由于我找不到这样的代码示例,所以我不确定这是否是好的做法和/或是否有任何我不知道的捕获的。谢谢! –