我是使用属性的新手,所以我整理了一个简单的测试,如下所示。在我的测试中,我创建了两个类“Test1”和“Test2”,每个类都包含一个值。我正在尝试使用属性来管理对伪隐藏“val”属性的访问。此当前测试不限制“val”属性的任何输入或输出,因为该程序仅作为概念证明。下面显示的两个测试类产生相同的结果,并且应该代表构造属性的不同方法。我所指的属性的示例可在此处的 python 文档中找到。
根据文档:
如果c 是C 的一个实例,cx 将调用getter,cx = value 将调用setter,del cx 将调用deleter。
其中 C 是他们的测试班。我认为通过以我所做的方式设置值会更改 _val 并将 val 作为属性。但是在我看来,我访问属性设置器的方法实际上是用整数替换属性,5
除非我弄错了。我希望有人能澄清我的困惑。
class Test1:
def __init__(self):
self._val = 0
def setVal(self,newVal):
self._val = newVal
val = property(lambda self: self._val, setVal, None, "Property for value")
def __str__(self):
return "Value: {}".format(self.val)
class Test2:
def __init__(self):
self._val = 0
@property
def val(self):
return self._val
@val.setter
def setVal(self,newVal):
self._val = newVal
def __str__(self):
return "Value: {}".format(self.val)
def verify(a):
print("\nCheck with {}".format(a.__class__.__name__))
print("Value check:",a.val)
a.val = 5
print("Value after a.val = 5 is:",a.val)
print("The actual value is:",a._val)
def main():
verify(Test1())
verify(Test2())
if __name__ == '__main__':
main()