【问题标题】:Python Property Problem which Converts Temperature from Fahrenheit to Celsius and Vice Versa将温度从华氏温度转换为摄氏温度的 Python 属性问题,反之亦然
【发布时间】:2020-04-09 22:12:26
【问题描述】:

代码:-

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,但不想再添加任何方法或类。

【问题讨论】:

标签: python dependency-properties


【解决方案1】:
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

得到了我的完美解决方案,使用“实例”对象

【讨论】:

  • 请花点时间在这里学习一下代码格式化工具——它们非常易于使用,并且会让您的帖子更具可读性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 2017-09-25
  • 2012-06-21
相关资源
最近更新 更多