Python 属性 将华氏温度转换为摄氏温度的问题,反之亦然
Python Property Problem which Converts Temperature from Fahrenheit to Celsius and Vice Versa
代码:-
class Celsius:
def __get__(self, obj, owner):
return self.__fahrenheit
def __set__(self, obj, value):
if not isinstance(value, int):
raise TypeError("'fahrenheit' must be an integer.")
self.__fahrenheit = value
class Temperature:
fahrenheit = Celsius()
celsius = 0.0
def __init__(self,fahrenheit):
self.fahrenheit = fahrenheit
#Temperature.fahrenheit = Temperature.celsius + 32
Temperature.celsius = float(self.fahrenheit - 32)
e1 = Temperature(78)
print(e1.fahrenheit, e1.celsius)
e1.celsius = 2.0
print(e1.fahrenheit, e1.celsius)
输出:-
78 46.0
78 2.0
当 e1.celsius = 2.0 时,我希望 e1.fahrenheit 值为 34,但不想再添加任何方法或 类.
class Celsius:
def __get__(self, instance, owner):
return 5 * (instance.fahrenheit - 32) / 9
def __set__(self, instance, value):
instance.fahrenheit = 32 + 9 * value / 5
class Temperature:
celsius = Celsius()
def __init__(self, initial_f):
self.fahrenheit = initial_f
e1 = Temperature(32)
print(e1.fahrenheit, e1.celsius)
e1.celsius = 0.0
print(e1.fahrenheit, e1.celsius)
输出:
32, 0.0
32.0 0.0
得到我的完美解决方案,使用 'instance' 对象
代码:-
class Celsius:
def __get__(self, obj, owner):
return self.__fahrenheit
def __set__(self, obj, value):
if not isinstance(value, int):
raise TypeError("'fahrenheit' must be an integer.")
self.__fahrenheit = value
class Temperature:
fahrenheit = Celsius()
celsius = 0.0
def __init__(self,fahrenheit):
self.fahrenheit = fahrenheit
#Temperature.fahrenheit = Temperature.celsius + 32
Temperature.celsius = float(self.fahrenheit - 32)
e1 = Temperature(78)
print(e1.fahrenheit, e1.celsius)
e1.celsius = 2.0
print(e1.fahrenheit, e1.celsius)
输出:- 78 46.0 78 2.0
当 e1.celsius = 2.0 时,我希望 e1.fahrenheit 值为 34,但不想再添加任何方法或 类.
class Celsius:
def __get__(self, instance, owner):
return 5 * (instance.fahrenheit - 32) / 9
def __set__(self, instance, value):
instance.fahrenheit = 32 + 9 * value / 5
class Temperature:
celsius = Celsius()
def __init__(self, initial_f):
self.fahrenheit = initial_f
e1 = Temperature(32)
print(e1.fahrenheit, e1.celsius)
e1.celsius = 0.0
print(e1.fahrenheit, e1.celsius)
输出:
32, 0.0
32.0 0.0
得到我的完美解决方案,使用 'instance' 对象