Peteryo01223 发表于 2021-3-5 11:20:16

第41讲:魔法方法 动动手 1

原题:
按照以下要求,定义一个类实现摄氏度到华氏度的转换(转换公式:华氏度 = 摄氏度*1.8+32)。要求:我们希望这个类尽量简练地实现功能,如下:
>>> print(C2F(32))
89.6

Fish C 的 正确答案:
class C2F(float):
      "摄氏度转换为华氏度"
      def __new__(cls, arg=0.0):
                return float.__new__(cls, arg * 1.8 + 32)


我的尝试:
class Temperatures():
    def __init__ (self, f, c):
      self.f = f
      self.c = c
       
    def c2f(self):
      return (c*1.8+32)

    def f2c(self):
      return ((f-32)/1.8)
问题:
1. Fish C 的答案中,cls 和 arg的用法确实看不懂,读了一些网络资料也不懂。能否言简意赅,帮我普及一下,怎么理解它。
2. 我的尝试,错在何处呀?

逃兵 发表于 2021-3-5 14:09:22

本帖最后由 逃兵 于 2021-3-5 14:14 编辑

class C2F(float) 这里C2F类继承于float,重写__new__方法

cls是类对象,表示需要实例化的类。区别于self,可以写其他参数,一般默认为cls

arg是你定义的参数

建议重新看一下视频七分钟后的内容

https://www.bilibili.com/video/BV1Fs411A7HZ?p=42

你写的代码稍作修改也是可以使用的

class Temperatures():
    def __init__ (self, f, c):
      self.f = f
      self.c = c
      
    def c2f(self):
      return (self.c*1.8+32)

    def f2c(self):
      return ((self.f-32)/1.8)


>>> a = Temperatures(89.6,32)
>>> a.c2f()
89.6
>>> a.f2c()
31.999999999999996
页: [1]
查看完整版本: 第41讲:魔法方法 动动手 1