gpt4 book ai didi

python - 理解 Python 属性的工作

转载 作者:太空宇宙 更新时间:2023-11-04 03:00:24 27 4
gpt4 key购买 nike

从其中一个博客,我有以下代码,我用它来理解 python property 的工作。

class Celsius:
def __init__(self, temperature = 0):
self._temperature = temperature

def to_fahrenheit(self):
return (self.temperature * 1.8) + 32

@property
def temperature(self):
print("Getting value")
return self._temperature

@temperature.setter
def temperature(self, value):
if value < -273:
raise ValueError("Temperature below -273 is not possible")
print("Setting value")
self._temperature = value

Q1:在__init__方法下,作者为什么要使用self._temperature。不应该是self.temperature吗?控件将如何转到@temperature.setter

最佳答案

使用self._temperature是否正确在__init__()有时是品味问题。本质上,现在有第三种方法(除了 settergetter )知道存储实际值的属性。 IMO 这不是很好,如果您重构类和更改属性可能会导致错误,但它本身并不是不正确的。

在某些情况下,setter 已经假定值以其他方式存储。不在这里,但例如当self._temperature只有在增加时才应该设置。在这种情况下,您必须直接访问该属性。 (这种情况可以通过在 setter 和 getter 中使用 hasattr(self, "_temperature") 测试“存储”属性是否存在并适本地初始化来规避)。

从来没有控制权交给二传手的地方。如果你这样做,setter 将被使用:

 self.temperature = some_value

您始终可以通过任何其他方法直接设置“隐藏”属性(在本例中为 self._temperate )(或直接访问 Celsius 实例上的属性)。请注意,这恰好是前面带有下划线的属性名称,它可以是任何(自由)名称。

关于python - 理解 Python 属性的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41083981/

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