gpt4 book ai didi

python - 属性与 Getters 和 Setters

转载 作者:行者123 更新时间:2023-11-28 22:26:19 27 4
gpt4 key购买 nike

它被认为是一个“horrible scenario”来更新 OurClass 以便“OurAtt”是一个介于 0 和 1000 之间的值:

class OurClass:
def __init__(self, a):
self.OurAtt = a

x = OurClass(10)
print(x.OurAtt)

现在,我的问题是为什么我们要依赖 @property?是因为代码易读性还是其他原因?因为我们可以很好地在 __init__() 方法下进行检查?

class OurClass:
def __init__(self, a):
if a < 0:
self.OurAtt = 0
elif a > 1000:
self.OurAtt = 1000
else:
self.OurAtt = a

最佳答案

您在 __init__ 方法中执行检查的事实不能保证该值以后不能更改为无效值。

例如:

x = OurClass(10)
x.OurAtt = -20

因此,我们希望在每次设置 ourAtt 值时运行测试。我们可以这样做:

class OurClass:

def __init__(self, a):
self.OurAtt = a

@property
def OurAtt(self):
return self._OurAtt

@OurAtt.setter
def OurAtt(self,a):
if a < 0:
self._OurAtt = 0
elif a > 1000:
self._OurAtt = 1000
else:
self._OurAtt = a

此外,它还可以使代码更具可读性:每个 setter 都会检查一个特定值是否有效。这通常比检查同一方法中的所有值更好,因为如果我们更改一个值的规范,我们只需修改相应的 setter

另一个优点是验证是在透明的情况下完成的:您不必将属性更改为“setter 方法”:对于用户来说,看起来就像他/她更改了属性一样。因此,您可以在此过程的后期 - 当用户已经使用该属性时 - 决定在不更改界面的情况下添加一些验证。

最后,它更具声明性,因此通常更“Python”。

关于python - 属性与 Getters 和 Setters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44904771/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com