我有一个非常简单的类,它将温度转换为华氏温度,另外它还确保值大于-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
它将执行温度设置器方法并引发异常。