使用 Python 中的描述符未获得预期结果
Not getting expected result using descriptor in Python
我是 Python 的新手...正在尝试使用描述符和 运行 下面的代码将华氏度更改为摄氏度。
但我没有得到确切的结果。有人可以帮忙吗,效果如何?
尝试了以下代码
import sys
import os
class Celsius:
def __get__(self, obj, owner):
return self.celsius
def __set__(self, obj, value):
self.celsius = (value-32)*5/9
class Temperature:
celsius = Celsius()
def __init__(self, f):
self.fahrenheit = f
t1 = Temperature(32)
t1.celsius = 0
if __name__ == "__main__":
t1 = Temperature(int(input()))
print(t1.fahrenheit, t1.celsius)
预期结果:(212, 100.0)(根据公式)
实际结果:(212,-17.77777777777778)
它是如何计算-17的?
t1.celsius = 0
这是你的错误。您正在创建具有零值的 Celsius class,因此 setter 设置 (0 - 32)*5/9 即 - 17.777777777778
您不应将 t1.celsius
初始化为 0,而应在 Temperature.__init__
:
中使用 celsius
的 setter
class Temperature:
celsius = Celsius()
def __init__(self, f):
self.fahrenheit = self.celsius = f
这是一个简单的温度管理器,可以处理以下对话:开尔文、华氏度、摄氏度
class Temperature:
def __init__(self, value, unit='C'):
self.value = value
if unit.upper() in ['C', 'F', 'K']:
self.unit = unit.upper()
else:
raise ValueError('Unit must be C|F|K')
@property
def kelvin(self):
if self.unit == 'K':
return self.value
elif self.unit == 'C':
return self.value - 273.15
else:
return (self.value - 273.15) * 9 / 5 + 32
@property
def celsius(self):
if self.unit == 'C':
return self.value
elif self.unit == 'K':
return self.value + 273.15
else:
return (self.value * 9 / 5) + 32
@property
def fahrenheit(self):
if self.unit == 'F':
return self.value
elif self.unit == 'C':
return (self.value - 32) * 5 / 9
else:
return (self.value - 32) * 5 / 9 + 273.15
t = Temperature(7,'k')
print(t.fahrenheit)
我是 Python 的新手...正在尝试使用描述符和 运行 下面的代码将华氏度更改为摄氏度。 但我没有得到确切的结果。有人可以帮忙吗,效果如何?
尝试了以下代码
import sys
import os
class Celsius:
def __get__(self, obj, owner):
return self.celsius
def __set__(self, obj, value):
self.celsius = (value-32)*5/9
class Temperature:
celsius = Celsius()
def __init__(self, f):
self.fahrenheit = f
t1 = Temperature(32)
t1.celsius = 0
if __name__ == "__main__":
t1 = Temperature(int(input()))
print(t1.fahrenheit, t1.celsius)
预期结果:(212, 100.0)(根据公式) 实际结果:(212,-17.77777777777778) 它是如何计算-17的?
t1.celsius = 0
这是你的错误。您正在创建具有零值的 Celsius class,因此 setter 设置 (0 - 32)*5/9 即 - 17.777777777778
您不应将 t1.celsius
初始化为 0,而应在 Temperature.__init__
:
celsius
的 setter
class Temperature:
celsius = Celsius()
def __init__(self, f):
self.fahrenheit = self.celsius = f
这是一个简单的温度管理器,可以处理以下对话:开尔文、华氏度、摄氏度
class Temperature:
def __init__(self, value, unit='C'):
self.value = value
if unit.upper() in ['C', 'F', 'K']:
self.unit = unit.upper()
else:
raise ValueError('Unit must be C|F|K')
@property
def kelvin(self):
if self.unit == 'K':
return self.value
elif self.unit == 'C':
return self.value - 273.15
else:
return (self.value - 273.15) * 9 / 5 + 32
@property
def celsius(self):
if self.unit == 'C':
return self.value
elif self.unit == 'K':
return self.value + 273.15
else:
return (self.value * 9 / 5) + 32
@property
def fahrenheit(self):
if self.unit == 'F':
return self.value
elif self.unit == 'C':
return (self.value - 32) * 5 / 9
else:
return (self.value - 32) * 5 / 9 + 273.15
t = Temperature(7,'k')
print(t.fahrenheit)