鱼C论坛

 找回密码
 立即注册
查看: 1132|回复: 8

求助 关于魔法方法__new__用法

[复制链接]
发表于 2018-7-6 09:43:03 | 显示全部楼层 |阅读模式
6鱼币
题目:定义一个类 Nstr, 当该类的实例对象间发生加减乘除的时候,将该对象的所有字符串转为ASCll码之和进行计算。
  1. class Nstr(int):
  2.     def __new__(cls, arg = 0):
  3.         if isinstance(arg, str):
  4.             total = 0
  5.             for each in arg:
  6.                 total += ord(each)
  7.             arg = total
  8.         return int.__new__(cls, arg)

  9. a = Nstr('I love')
  10. b = Nstr('you')
  11. print(a)
  12. print(b)
  13. print(a + b)
复制代码

def __new__(cls, arg = 0):  这里 arg = 0 是做什么的?

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

使用道具 举报

发表于 2018-7-6 09:47:49 | 显示全部楼层
默认参数,中初始化实例化对象的时候可以不传入参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-6 09:48:18 | 显示全部楼层
不输入参数时,不报错,返回0
  1. >>> a=Nstr()
  2. >>> a
  3. 0
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-6 10:03:41 | 显示全部楼层
BngThea 发表于 2018-7-6 09:47
默认参数,中初始化实例化对象的时候可以不传入参数

那下面代码中 还有  arg 出现呢?
刚刚试了,如果 new 里面不加 arg  就报错了,这个 arg = 0 在这里还有什么作用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-7-6 10:05:14 | 显示全部楼层
冬雪雪冬 发表于 2018-7-6 09:48
不输入参数时,不报错,返回0

你好
那下面代码中 还有  arg 出现呢?
刚刚试了,如果 new 里面不加 arg  就报错了,这个 arg = 0 在这里还有什么作用?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-6 10:08:48 | 显示全部楼层
铁岭小刚fishc 发表于 2018-7-6 10:05
你好
那下面代码中 还有  arg 出现呢?
刚刚试了,如果 new 里面不加 arg  就报错了,这个 arg = 0 在 ...

做个缺省值,这样就可以不输入参数了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-6 10:24:24 | 显示全部楼层
铁岭小刚fishc 发表于 2018-7-6 10:03
那下面代码中 还有  arg 出现呢?
刚刚试了,如果 new 里面不加 arg  就报错了,这个 arg = 0 在这里还 ...

调用int的new需要这个参数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-6 17:21:49 | 显示全部楼层
将实例属性放在 构造方法中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-6 17:45:20 | 显示全部楼层
lz其实你的问题不是没有理解__new__这个魔法,而是没理解方法下的参数如何设置。
arg就是你自己设置的__new__这个特殊方法下的一个传入参数。arg=0就是如果这个参数没有被传入,那么arg这个参数就自动设置为0
这是一个普遍用法而已。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 03:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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