鱼C论坛

 找回密码
 立即注册
查看: 856|回复: 3

[已解决]python第42讲课后练习

[复制链接]
发表于 2020-5-25 17:29:30 | 显示全部楼层 |阅读模式

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

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

x
动动手第2题:定义一个类 Nstr,当该类的实例对象间发生的加、减、乘、除运算时,将该对象的所有字符串的 ASCII 码之和进行计算:
我写出来的答案是:
class Nstr(str):
        def __new__(self,string):
                self.arg = 0
                self.string = string
                for each in self.string:
                        self.arg += ord(each)
                return self.arg

参考答案给出的是:
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)

请问下返回self.arg也是一个整形的对象,跟int.__new__(cls,arg)有什么区别呀?
最佳答案
2020-5-25 18:33:07
在运算上你返回的self.arg是一个int类型的数,用来加减乘除肯定是没有问题,要说的话,你没有给他定义自己的类方法,所有当Nstr类对象实例化后实例对象是int类而不是Nstr类
第一种情况:
>>> a = Nstr('hhh')
>>> a
312
>>> type(a)
<class 'int'>
答案:
>>> a = Nstr('hhh')
>>> a
312
>>> type(a)
<class '__main__.Nstr'>

以上个人看法,再详细也说不出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-25 18:33:07 | 显示全部楼层    本楼为最佳答案   
在运算上你返回的self.arg是一个int类型的数,用来加减乘除肯定是没有问题,要说的话,你没有给他定义自己的类方法,所有当Nstr类对象实例化后实例对象是int类而不是Nstr类
第一种情况:
>>> a = Nstr('hhh')
>>> a
312
>>> type(a)
<class 'int'>
答案:
>>> a = Nstr('hhh')
>>> a
312
>>> type(a)
<class '__main__.Nstr'>

以上个人看法,再详细也说不出来了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-25 18:41:01 | 显示全部楼层
你那个错了,__new__()它第一个参数是这个类,不是self
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-5-26 15:47:05 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-21 04:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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