我有一个非常简单的类,它将温度转换为华氏温度,另外它还确保值大于-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()

---------------------------------------------------------------------------值错误回溯(最近的调用
最后)在()
1 c=摄氏度()
---->2 c.温度=-275
3摄氏度到华氏度()
温度(自身,值)
15 def温度(自,值):
16如果值--->17升高值错误(“温度不可能低于-273”)
18打印(“设定值”)
19自身温度=值
值错误:温度不可能低于-273
到现在为止,一直都还不错!但问题是,如果我尝试在课程开始时设置温度,我可以选择-275,它不会提示错误
c = Celsius(-275)
c.to_fahrenheit()

> Getting_value Out[88]:
> -463.0

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

最佳答案

这是因为你在in It方法中使用
self._temperature = temperature
你的体温调节器也不工作。您可以将代码更改为
self.temperature = temperature
它将执行温度设置器方法并引发异常。

10-08 13:15