gpt4 book ai didi

python - Python @property setter 中的约束未应用

转载 作者:行者123 更新时间:2023-11-28 22:16:33 25 4
gpt4 key购买 nike

我有一个非常简单的类,它将温度转换为华氏度,此外它还确保该值大于-273

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

如果我运行以下代码

c = Celsius()
c.temperature=23
c.to_fahrenheit()

我得到预期的输出:

Setting value
Getting_value
Out[89]:
73.4

现在尝试将温度设置为 -275,我们收到了预期的错误!

c = Celsius()
c.temperature=-275
c.to_fahrenheit()

--------------------------------------------------------------------------- ValueError Traceback (most recent call last) in () 1 c = Celsius() ----> 2 c.temperature=-275 3 c.to_fahrenheit()

in temperature(self, value) 15 def temperature(self, value): 16 if value < -273: ---> 17 raise ValueError("Temperature below -273 is not possible") 18 print("Setting value") 19 self._temperature = value

ValueError: Temperature below -273 is not possible

到目前为止一切顺利!但问题是,如果我在类(class)开始时尝试设置温度,我可以选择-275,并且不会提示错误

c = Celsius(-275)
c.to_fahrenheit()

> Getting_value Out[88]:
> -463.0

我的问题是为什么它没有触发错误?据我了解,@temper.setter将确保检查温度是否<-273,但由于某种原因它通过了它。

最佳答案

发生这种情况是因为您在 init 方法中使用了

self._temp = 温度

并且您的温度 setter 不会执行。您可以将代码更改为

self.温度 = 温度

它将执行温度设置方法并引发异常。

关于python - Python @property setter 中的约束未应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52120764/

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