Python Свойство проблема, которая преобразует температуру из Фаренгейта в градусы Цельсия и наоборот - PullRequest
0 голосов
/ 10 апреля 2020

Код: -

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.fahrenheit было 34, когда e1.celsius = 2.0, но не хочу добавьте больше методов или классов.

1 Ответ

0 голосов
/ 13 апреля 2020
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'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...