鱼C论坛

 找回密码
 立即注册
查看: 1689|回复: 6

[已解决]第42讲课后作业动手提2

[复制链接]
发表于 2021-11-9 16:57:16 | 显示全部楼层 |阅读模式

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

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

x
2. 定义一个类 Nstr,当该类的实例对象间发生的加、减、乘、除运算时,将该对象的所有字符串的 ASCII 码之和进行计算:

小甲鱼的代码:
class Nstr(int):
    def __new__(cls, arg=0):
        if isinstance(arg, str):
            total = 0
            for each in arg:
                total += ord(each)
            arg = total
        return int.__new__(cls, arg)

>>> a = Nstr('FishC')
>>> b = Nstr('love')
到这里为止,class Nstr(int)里面不是应该继承整型吗
最佳答案
2021-11-9 17:39:22
本帖最后由 jackz007 于 2021-11-9 17:40 编辑
        return int.__new__(cls, arg)
        是的,你看 __new__() 最后调用的是 int 的方法 int . __new__() ,所使用的参数 arg 确实是一个整数。那么,这就说明 Nstr 类的属性确实是个整数,只不过经过扩展以后,可以用字符串来进行初始化,除此以外,通过 Nstr 创建的对象与普通的整型数无异,拥有 int 类所有的属性和方法,如,可以 +、-、*、/ 等等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-11-9 17:30:51 | 显示全部楼层
class Nstr(int): 指明父类的时候就自动集成了,如果要重写魔法函数,就在下面写就行了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 17:39:22 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2021-11-9 17:40 编辑
        return int.__new__(cls, arg)
        是的,你看 __new__() 最后调用的是 int 的方法 int . __new__() ,所使用的参数 arg 确实是一个整数。那么,这就说明 Nstr 类的属性确实是个整数,只不过经过扩展以后,可以用字符串来进行初始化,除此以外,通过 Nstr 创建的对象与普通的整型数无异,拥有 int 类所有的属性和方法,如,可以 +、-、*、/ 等等。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 20:56:51 | 显示全部楼层
jackz007 发表于 2021-11-9 17:39
是的,你看 __new__() 最后调用的是 int 的方法 int . __new__() ,所使用的参数 arg 确实是一个 ...

哦,我大概明白了你的意思,那还有个问题就是,你说是因为经过扩展所以可以用字符串初始化,那么我想知道我们扩展的代码在那一部分体现了呢,谢谢,望回复~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-9 21:21:56 | 显示全部楼层
本帖最后由 jackz007 于 2021-11-9 21:25 编辑

       int 是有 __new__() 方法的,Nstr 的 __new__() 方法就是在调用 int . __new__() 创建对象前,先对参数 arg 进行必要的处理,然后,才把参数 arg 传递给 int . __new()__ 正常创建 int 型的对象。前面已经说过,Nstr 对 int 的全部扩展就体现在可以接受字符串对对象进行初始化。此后,这个对象不过就是一个普通的整型数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-11-9 21:24:38 | 显示全部楼层
jackz007 发表于 2021-11-9 21:21
int 是有 __new__() 方法的,Nstr 的 __new__() 方法就是全部扩展的内容。前面已经说过,Nstr 对 in ...

明白了!十分感谢您耐心的回答!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-25 22:50:42 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 19:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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