Python 温度 class 转换器 (K,F,C)
Python Temperature class converter (K,F,C)
这是我正在尝试做的事情:我想编写一个工作 python class 代码,它只需给它一个随机值就可以自行转换所有内容。
我想要的是:
>>> first=Temperature()
>>> first.celsius = 60
>>> first.kelvin
333.15
>>> first.fahrenheit
140
无论我设置的第一个描述符是什么,我都希望其他描述符自己转换,即使我执行以下操作也是如此:
>>> first.celsius = 60
>>> first.kelvin
333.15
>>> first.celsius += 1
>>> first.kelvin
334.15
这是我一直在处理的代码:
class Celsius:
def __get__(self, instance, owner):
return 5 * (instance.fahrenheit - 32) / 9
def __set__(self, instance, value):
instance.fahrenheit = 32 + 9 * value / 5
def __set__(self, instance, value):
instance.kelvin = value + 273.15
class Temperature:
celsius = Celsius()
def __init__(self):
self.fahrenheit = 0
def __init__(self):
self.kelvin = 0
有些东西在工作,但转换回来工作不正常,它会产生一些错误,但我真的不知道如何让它工作,希望得到一些帮助,即使你们给我一份 20 页的文档。
定义它以便 Temperature
class 跟踪 one 单位的温度(我喜欢开尔文,所以我将使用它),然后在 getter 和 setter 中为每个 属性.
使用它
class Temperature:
def __init__(self):
self.__value = 0
@property
def celsius(self):
return self.__value - 273.15
@property
def kelvin(self):
return self.__value
@property
def fahrenheit(self):
return (self.__value - 273.15) * 9 / 5 + 32
@celsius.setter
def celsius(self, val):
self.__value = val + 273.15
@kelvin.setter
def kelvin(self, val):
self.__value = val
@fahrenheit.setter
def fahrenheit(self, val):
self.__value = ((val - 32) * 5 / 9) + 273.15
现在,您可以设置任何 属性,当您获取其他值时,您将获得正确的值
你可以这样使用它:
t = Temperature()
t.celsius = 0
print(t.kelvin)
print(t.fahrenheit)
这输出:
273.15
32.0
你也可以这样做:
t.fahrenheit = 212
print(t.kelvin)
print(t.celsius)
输出:
373.15
100
self.__value
中的双下划线使它成为一个“dunder 变量”,mangles its name 在解释器中,这样你就不能直接访问 t.__value
(你会得到AttributeError: 'Temperature' object has no attribute '__value'
错误)
我认为将属性直接放在 class 中会更容易。
class Temp:
_f = None
_c = None
_k = None
@property
def f(self):
return self._f
@property
def c(self):
return self._c
@property
def k(self):
return self._k
#Update "assignment to c" to perform additional calculations.
@c.setter
def c(self, temp):
self._c = temp
self._f = 1.8 * temp + 32
t = Temp()
t.c = 34
print(t.f)
您需要的是属性。使用一个通用的内部值并根据 属性 集合进行设置:
class Temperature:
def __init__(self):
self.__kelvin = 273.15
@property
def kelvin(self):
return self.__kelvin
@property
def celsius(self):
return self.__kelvin - 273.15
@property
def fahrenheit(self):
return (self.__kelvin - 273.15) * 9 / 5 + 32
@kelvin.setter
def kelvin(self,value):
self.__kelvin = value
@celsius.setter
def celsius(self,value):
self.__kelvin = value + 273.15
@fahrenheit.setter
def fahrenheit(self,value):
self.__kelvin = (value - 32) * 5 / 9 + 273.15
def __repr__(self):
return f'Temperature(__kelvin={self.__kelvin})'
def __str__(self):
return f'{self.kelvin:.2f}\N{DEGREE SIGN}K/{self.celsius:.2f}\N{DEGREE SIGN}C/{self.fahrenheit:.2f}\N{DEGREE SIGN}F'
first = Temperature()
print(first)
first.kelvin = 0
print(first)
first.fahrenheit = 212
print(first)
first.celsius = 10
print(first)
输出:
273.15°K/0.00°C/32.00°F
0.00°K/-273.15°C/-459.67°F
373.15°K/100.00°C/212.00°F
283.15°K/10.00°C/50.00°F
我标记为答案的代码旁边的另一个代码也执行完全相同的工作:
class Temperature:
def __init__(self):
self.kelvin = 0
@property
def celsius(self):
return self.kelvin - 273.15
@celsius.setter
def celsius(self, val):
self.kelvin = val + 273.15
@property
def fahrenheit(self):
return self.kelvin * 9/5 - 459.67
@fahrenheit.setter
def fahrenheit(self, val):
self.kelvin = (val + 459.67) * 5/9
这是我正在尝试做的事情:我想编写一个工作 python class 代码,它只需给它一个随机值就可以自行转换所有内容。
我想要的是:
>>> first=Temperature()
>>> first.celsius = 60
>>> first.kelvin
333.15
>>> first.fahrenheit
140
无论我设置的第一个描述符是什么,我都希望其他描述符自己转换,即使我执行以下操作也是如此:
>>> first.celsius = 60
>>> first.kelvin
333.15
>>> first.celsius += 1
>>> first.kelvin
334.15
这是我一直在处理的代码:
class Celsius:
def __get__(self, instance, owner):
return 5 * (instance.fahrenheit - 32) / 9
def __set__(self, instance, value):
instance.fahrenheit = 32 + 9 * value / 5
def __set__(self, instance, value):
instance.kelvin = value + 273.15
class Temperature:
celsius = Celsius()
def __init__(self):
self.fahrenheit = 0
def __init__(self):
self.kelvin = 0
有些东西在工作,但转换回来工作不正常,它会产生一些错误,但我真的不知道如何让它工作,希望得到一些帮助,即使你们给我一份 20 页的文档。
定义它以便 Temperature
class 跟踪 one 单位的温度(我喜欢开尔文,所以我将使用它),然后在 getter 和 setter 中为每个 属性.
class Temperature:
def __init__(self):
self.__value = 0
@property
def celsius(self):
return self.__value - 273.15
@property
def kelvin(self):
return self.__value
@property
def fahrenheit(self):
return (self.__value - 273.15) * 9 / 5 + 32
@celsius.setter
def celsius(self, val):
self.__value = val + 273.15
@kelvin.setter
def kelvin(self, val):
self.__value = val
@fahrenheit.setter
def fahrenheit(self, val):
self.__value = ((val - 32) * 5 / 9) + 273.15
现在,您可以设置任何 属性,当您获取其他值时,您将获得正确的值
你可以这样使用它:
t = Temperature()
t.celsius = 0
print(t.kelvin)
print(t.fahrenheit)
这输出:
273.15
32.0
你也可以这样做:
t.fahrenheit = 212
print(t.kelvin)
print(t.celsius)
输出:
373.15
100
self.__value
中的双下划线使它成为一个“dunder 变量”,mangles its name 在解释器中,这样你就不能直接访问 t.__value
(你会得到AttributeError: 'Temperature' object has no attribute '__value'
错误)
我认为将属性直接放在 class 中会更容易。
class Temp:
_f = None
_c = None
_k = None
@property
def f(self):
return self._f
@property
def c(self):
return self._c
@property
def k(self):
return self._k
#Update "assignment to c" to perform additional calculations.
@c.setter
def c(self, temp):
self._c = temp
self._f = 1.8 * temp + 32
t = Temp()
t.c = 34
print(t.f)
您需要的是属性。使用一个通用的内部值并根据 属性 集合进行设置:
class Temperature:
def __init__(self):
self.__kelvin = 273.15
@property
def kelvin(self):
return self.__kelvin
@property
def celsius(self):
return self.__kelvin - 273.15
@property
def fahrenheit(self):
return (self.__kelvin - 273.15) * 9 / 5 + 32
@kelvin.setter
def kelvin(self,value):
self.__kelvin = value
@celsius.setter
def celsius(self,value):
self.__kelvin = value + 273.15
@fahrenheit.setter
def fahrenheit(self,value):
self.__kelvin = (value - 32) * 5 / 9 + 273.15
def __repr__(self):
return f'Temperature(__kelvin={self.__kelvin})'
def __str__(self):
return f'{self.kelvin:.2f}\N{DEGREE SIGN}K/{self.celsius:.2f}\N{DEGREE SIGN}C/{self.fahrenheit:.2f}\N{DEGREE SIGN}F'
first = Temperature()
print(first)
first.kelvin = 0
print(first)
first.fahrenheit = 212
print(first)
first.celsius = 10
print(first)
输出:
273.15°K/0.00°C/32.00°F
0.00°K/-273.15°C/-459.67°F
373.15°K/100.00°C/212.00°F
283.15°K/10.00°C/50.00°F
我标记为答案的代码旁边的另一个代码也执行完全相同的工作:
class Temperature:
def __init__(self):
self.kelvin = 0
@property
def celsius(self):
return self.kelvin - 273.15
@celsius.setter
def celsius(self, val):
self.kelvin = val + 273.15
@property
def fahrenheit(self):
return self.kelvin * 9/5 - 459.67
@fahrenheit.setter
def fahrenheit(self, val):
self.kelvin = (val + 459.67) * 5/9