zoukankan      html  css  js  c++  java
  • cookbook 6.1 温标的转换

    任务:

    在开氏温度(Kelvin)、摄氏度(Celsius)、华氏温度(Fahrenheit)、兰金温度(Rankine)之间做转换

    解决方案:

    #coding=utf-8
    class Temperature(object):
        coefficients={'c':(1.0,0.0,-273.15),'f':(1.8,-273.15,32.0),'r':(1.8,0.0,0.0)}
    
        def __init__(self,**kwargs):
            try:
                name,value = kwargs.popitem()
            except KeyError:
                name,value = 'k',0
            if kwargs or name not in 'kcfr':
                kwargs[name] = value
                raise TypeError,'invalid arguments %r' % kwargs
            setattr(self,name,float(value))
    
        def __getattr__(self,name):
            try:
                eq = self.coefficients[name]
            except KeyError:
                raise AttributeError,name
            return (self.k + eq[1]) + eq[0] + eq[2]
        def __setattr__(self,name,value):
            if name in self.coefficients:
                eq = self.coefficients[name]
                self.k = (value - eq[2]) / eq[0] - eq[1]
            elif name == 'k':
                object.__setattr__(self,name,value)
            else:
                raise AttributeError,name
        def __str__(self):
            return "%s K" % self.k
        def __repr__(self):
            return "Temperature(k=%r)" % self.k
    
    #测试
    te = Temperature(f=70)
    print te.c
  • 相关阅读:
    闭包
    线程与进程
    异常处理
    socket编程
    面向对象编程
    模块
    正则表达式
    递归、二分查找、冒泡算法
    装饰器
    迭代器与生成器
  • 原文地址:https://www.cnblogs.com/LittleRedPoint/p/4001669.html
Copyright © 2011-2022 走看看