鱼C论坛

 找回密码
 立即注册
查看: 780|回复: 1

关于类中魔法方法的定义

[复制链接]
发表于 2018-4-15 15:29:48 | 显示全部楼层 |阅读模式

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

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

x
#Q1
在《零基础入门学习Python》这本书中,小甲鱼提到: 在定义魔法方法时容易实现无限递归。比如
"
def __add__(self, other):
        return self + other
"
这样的定义就会引起无限递归,因为 ‘+’会再次触发add魔法方法形成调用的回环。小甲鱼提供的解决方案如下:
"
def __add__(self, other):
        return int(self) + int(other)#注:魔法方法的定义是在一个继承于int类的新类中进行的,不知道有没有影响


我的问题是:这里把两个对象转化成int实例对象后,为什么‘+’就不会再触发__add__()魔法方法引发无限循环了呢?
'+'触发add魔法方法是和两边的操作数有关的吗?

#Q2

在第47讲中的动动手作业中,我也有同样的疑问。
"
def __len__(self):
        return len(self.count)
"
像这样一段代码不会引起无限递归吗?不是同样在方法定义内部使用了方法本身吗?

上面应该属于一类问题,难以摸透具体原因。敬请大家帮助解惑,不胜感激
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-4-15 15:55:13 | 显示全部楼层
所谓递归,是『自己调用自己』。
def __add__(self, other):
    return int(self) + int(other)
=====================
int()是另一个函数,所以不存在递归。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 10:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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