Tigeroad 发表于 2020-5-20 21:57:23

p41 课后题第1题的疑问

定义一个类实现摄氏度到华氏度的转换(转换公式:华氏度 = 摄氏度*1.8+32)
首先,我对于__new__()这个魔法方法还是不怎么理解,然后就出现了如下的代码:
class C2F:
    def __new__(cls, cel):
      return cel*1.8 + 32

结果很神奇的是,竟然成功运行了{:10_282:}
结果我一看小甲鱼老师的答案,无语了,思路风马牛不相及,我还是在按之前学的基础的知识,根本木有理解这个函数啊!
请问大神们这样有没有问题,
然后请问大家
return float.__new__(cls, arg*1.8 + 32)
这行代码的理解
流下了脑子不够用的泪水。。。

Twilight6 发表于 2020-5-20 22:08:28

哈哈

Twilight6 发表于 2020-5-20 22:10:31

你这不是完整代码吧?

aaron.yang 发表于 2020-5-20 22:11:15

Twilight6 发表于 2020-5-20 22:08
哈哈

。。。

Twilight6 发表于 2020-5-20 22:18:44

我去看了下,小甲鱼的答案是这样的:
class C2F(float):
    def __new__(cls, arg=0.0):
      return float.__new__(cls, arg * 1.8 + 32)
你的疑问是最后一句是什么意思吧
就是类对象C2F继承了 float 浮点型函数的方法,让他返回的是以浮点型返回

永恒的蓝色梦想 发表于 2020-5-20 22:20:17

float.__new__(cls, arg*1.8 + 32)只是把返回值做成了C2F对象而已,而你的返回值为float。

Twilight6 发表于 2020-5-20 22:23:30

其实我感觉你的答案已经足够了,因为你乘了一个浮点数,产生的也是浮点数

Tigeroad 发表于 2020-5-22 16:49:29

Twilight6 发表于 2020-5-20 22:23
其实我感觉你的答案已经足够了,因为你乘了一个浮点数,产生的也是浮点数

可能是偏门邪道吧哈哈 ,目前类与对象这里我还是不知道定义类的具体用处,所以理解不透。继续看课程。。

Twilight6 发表于 2020-5-22 16:51:39

Tigeroad 发表于 2020-5-22 16:49
可能是偏门邪道吧哈哈 ,目前类与对象这里我还是不知道定义类的具体用处,所以理解不透。继续看课程。。

我的笔记看看可能能帮助到你理解:
Python类实例方法类、实例、局部变量

Tigeroad 发表于 2020-5-22 17:16:29

永恒的蓝色梦想 发表于 2020-5-20 22:20
只是把返回值做成了C2F对象而已,而你的返回值为float。

请问:如果按小甲鱼的代码,“返回值做成了C2F对象而已”这句话的意思是什么呢,返回值不是一个继承float的类嘛?

永恒的蓝色梦想 发表于 2020-5-22 17:24:00

Tigeroad 发表于 2020-5-22 17:16
请问:如果按小甲鱼的代码,“返回值做成了C2F对象而已”这句话的意思是什么呢,返回值不是一个继承float ...

谁告诉你要返回类的?要返回这个类的对象

Tigeroad 发表于 2020-5-22 17:31:01

永恒的蓝色梦想 发表于 2020-5-22 17:24
谁告诉你要返回类的?要返回这个类的对象

那返回float这个类的对象,这么说对吗?

Tigeroad 发表于 2020-5-22 17:31:33

Twilight6 发表于 2020-5-22 16:51
我的笔记看看可能能帮助到你理解:
Python类实例方法类、实例、局部变量

谢谢你!

Twilight6 发表于 2020-5-22 17:32:09

Tigeroad 发表于 2020-5-22 17:31
谢谢你!

嘿嘿 对你有帮助记得设置最佳噢~{:10_297:}
页: [1]
查看完整版本: p41 课后题第1题的疑问