|
|
3鱼币
- class Try_int(int):
- def __add__(self, other):
- return self + other
- def __sub__(self, other):
- return self - other
复制代码
执行这个 会进入无限递归,然后这样写:
- class Try_int(int):
- def __add__(self, other):
- return int(self) + int(other)
- def __sub__(self, other):
- return int(self) - int(other
复制代码
然后这样执行就正常了。//// 我想问 上面代码 抛出异常无限递归的原因 是在__add__()魔法方法时候,返回值中又调用了 ‘+‘ ,那下面代码中是加了 int()
但是 return int(self) + int(other) 这个返回值中还是有 ’+‘ 的?不是又调用了 __add__() 魔法方法么?
本帖最后由 久疤K 于 2018-5-13 20:24 编辑
你的 Try_int类实例,在 相加时,会执行 __add__方法,而你的 __add__方法中,又执行了 相加操作,于是又会调用 __add__方法,于是无限递归。
而后者,在相加操作时,内部操作为: - return int(self) + int(other)
复制代码,它是先转化为 int类型,而后相加,调用的是 int类型的 __add__方法,其内部实现我们无需去计较了,与本类无关。
同时,也要注意到,两个本类对象相加后,得到的数据是 int类型的,不是本类对象咯。。
如果要想结果也是本类对象,可以写成 - return Try_int(int(self) + int(other))
复制代码,有时候有可能会有这种需求。
|
最佳答案
查看完整内容
你的Try_int类实例,在相加时,会执行__add__方法,而你的__add__方法中,又执行了相加操作,于是又会调用__add__方法,于是无限递归。
而后者,在相加操作时,内部操作为:,它是先转化为int类型,而后相加,调用的是int类型的__add__方法,其内部实现我们无需去计较了,与本类无关。
同时,也要注意到,两个本类对象相加后,得到的数据是int类型的,不是本类对象咯。。
如果要想结果也是本类对象,可以写成,有时候有可能会有 ...
|