鱼C论坛

 找回密码
 立即注册
查看: 1495|回复: 7

[已解决]小甲鱼课后题摄氏度转换华氏度疑问??

[复制链接]
发表于 2020-3-14 22:23:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
看了小甲鱼的课后题摄氏度转化华氏度问题有个疑问???
--------------------------------答案--------------------------------
class C2F(float):
    def __new__(cls,arg=0.0):
        return float.__new__(cls,arg * 1.8 + 32)
---------------------------------自己写的-------------------------
class C2F:
    def __new__(cls,arg:float):
        return arg * 1.8 + 32

这两个都可以实现转化温度,两者有啥区别???
新手不太明白,希望大侠们能点拨点拨
最佳答案
2020-3-14 22:43:41
把程序稍微增加点内容。
class C2F(float):
    def __new__(cls,arg=0.0):
        return float.__new__(cls,arg * 1.8 + 32)
    def __radd__(self, other):
        return other - self
a = C2F(20)
print(a, type(a))
print(10 + a)
68.0 <class '__main__.C2F'>
-58.0
class C2F:
    def __new__(cls,arg:float):
        return arg * 1.8 + 32
    def __radd__(self, other):
        return other - self
a = C2F(20)
print(a, type(a))
print(10 + a)
68.0 <class 'float'>
78.0
这回有差别了,第一个得到的是C2F类,整数没有和它的加法,所以用radd
第二个得到的是浮点数类,整数可以和它相加,就没有调用C2F的radd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-14 22:27:33 | 显示全部楼层
走过路过,捧个场。点拨点拨一下小弟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-14 22:34:45 | 显示全部楼层
建议可以查阅一下关于魔法方法的一些知识点,对你理解这个问题会更有帮助。__new__(cls, arg) 等等

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-14 22:43:41 | 显示全部楼层    本楼为最佳答案   
把程序稍微增加点内容。
class C2F(float):
    def __new__(cls,arg=0.0):
        return float.__new__(cls,arg * 1.8 + 32)
    def __radd__(self, other):
        return other - self
a = C2F(20)
print(a, type(a))
print(10 + a)
68.0 <class '__main__.C2F'>
-58.0
class C2F:
    def __new__(cls,arg:float):
        return arg * 1.8 + 32
    def __radd__(self, other):
        return other - self
a = C2F(20)
print(a, type(a))
print(10 + a)
68.0 <class 'float'>
78.0
这回有差别了,第一个得到的是C2F类,整数没有和它的加法,所以用radd
第二个得到的是浮点数类,整数可以和它相加,就没有调用C2F的radd
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-14 22:54:35 | 显示全部楼层
sYMMetrY 发表于 2020-3-14 22:34
建议可以查阅一下关于魔法方法的一些知识点,对你理解这个问题会更有帮助。__new__(cls, arg) 等等

是不是魔法方法new的return
一定要是这种格式或者模式
return object.__new__(cls,arg)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-14 23:12:49 | 显示全部楼层
陆漫漫 发表于 2020-3-14 22:54
是不是魔法方法new的return
一定要是这种格式或者模式
return object.__new__(cls,arg)


我觉得四楼已经告诉你答案啦~~  __new__()函数是类方法中第一个调用的函数,如果修改之后最好写为:return xxx.__new__(){或者使用super.__new__()} 避免对之后的方法造成影响。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-14 23:15:42 | 显示全部楼层
冬雪雪冬 发表于 2020-3-14 22:43
把程序稍微增加点内容。

谢谢版主,明白了。
new魔法方法应该返回实例对象或者其他对象(小甲鱼说的这句话终于理解了)

我自己写的  魔法方法new 返回了一个float类型的数据  而float的radd没有被重写为  return other - self
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-14 23:29:27 | 显示全部楼层
本帖最后由 陆漫漫 于 2020-3-15 20:22 编辑


                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 20:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表