实现温度转换

需求

  • 实现华氏度和摄氏度的转换
    摄氏度 = 5 *(华氏度-32) / 9
    华氏度 = 9 * 摄氏度 / 5+32
    开氏度 = 摄氏度 + 273.15

主要封装算法思路

  • 设置私有属性,私有属性摄氏度、华氏度和开氏度
  • 用户不管给那个属性,统一转换为摄氏度
  • 通过属性装饰器property,控制想要的温度,需要什么温度转换什么温度,不需要时不求值,实现一定意义上的惰性求值。

实现代码

class Temperature:
    """on doc"""
    def __init__(self,t,unit="c"):
        self._c = None
        self._f = None
        self._k = None

        #都先将温度转化为摄氏度,此时对象都拥有摄氏度
        if unit == "f":
            self._f = t
            self._c = self.f2c(t)
        elif unit == "k":
            self._k = t
            self._c = self.k2c(t)
        else:
            self.c = t

    @property
    def c(self):
        return self._c

    @property
    def f(self):
        if self._f is None:
            self._f = self.c2f(self._c)
        return self._f

    @property
    def k(self):
        if self._k is None:
            self._k = self.c2k(self._c)
        return self._k

    #温度转化
    @classmethod
    def c2f(cls,c):
        return 9*c/5 + 32

    @classmethod
    def f2c(cls,f):
        return 5*(f-32)/9

    @classmethod
    def c2k(cls,c):
        return c + 273.15

    @classmethod
    def f2k(cls,f):
        return cls.c2k(cls.f2c(f))

    @classmethod
    def k2f(cls,k):
        return cls.c2f(cls.k2c(k))

    @classmethod
    def k2c(cls,k):
        return k-273.15

t = Temperature(45,"f")
print(t.c,t.f,t.k)
运行结果:
7.222222222222222 45 280.3722222222222
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值