鱼C论坛

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

算术魔法方法的使用问题,请各位大神给予指导

[复制链接]
发表于 2017-3-14 17:58:48 | 显示全部楼层 |阅读模式

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

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

x
这段代码 QQ截图20170314174353.png 可以正常捕获减号,并打印出答案1,而 QQ截图20170314174814.png 这段代码会进入无限递归。请问各位大神:1,造成这两段代码运算结果差别的原因是什么,为什么第一段代码不会进入无限递归?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-3-14 18:04:59 | 显示全部楼层
在类方法中 self和other指的都是被实例化的类对象
第一段代码是因为你使用的是类成员减去类对象
第二段代码是因为你是用的都是类对象减去类对象,这样又会再次调用 __sub__方法,这样就会不断循环下去
你理解下 看有什么问题 可以继续提问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-3-14 18:17:15 | 显示全部楼层
lumber2388779 发表于 2017-3-14 18:04
在类方法中 self和other指的都是被实例化的类对象
第一段代码是因为你使用的是类成员减去类对象
第二段代 ...

大神您好,可否这样理解您的解释,您的意思是捕获减号的__sub__只有在类对象减类对象的时候才会被调用?这个问题比较抽象,作为小白的我真的有点难得理解。谢谢关注
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-3-14 19:25:35 | 显示全部楼层
jasonli_whu 发表于 2017-3-14 18:17
大神您好,可否这样理解您的解释,您的意思是捕获减号的__sub__只有在类对象减类对象的时候才会被调用? ...

对,你可以看下参数,self指的是类对象本身,而other指的是其他同类对象
只有对象跟对象之间的减法才会调用到__sub__这个内置方法
而self.data已经不是Number类对象 所以不会进入死循环
你可以在方法中加入打印类型看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-7 02:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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