课件魔法方法:算数运算1中看不懂
class Try_int(int):def __add_(self,other):
return self+other
a = Try_int(3)
b = Try_int(3)
a+b 就会出现无限递归,但是将return的值改为int(self)+int(other)就正常了,为什么?没看懂
原本的a 和 b 不是int吗?
并不会无限递归
class Try_int(int):
def __add_(self, other):
return self + other
a = Try_int(3)
b = Try_int(3)
print(a + b)
Twilight6 发表于 2020-6-27 17:04
并不会无限递归
class E(int):
def __add__(self,other):
return self+other
a = E(3)
b = E(3)
print(a+b)
这样就会。我感觉和刚才的代码也没啥差别就是取名不一样啊 我是一只羊 发表于 2020-6-27 17:38
class E(int):
def __add__(self,other):
return self+other
。。。 我知道了你原先的代码 和我发的代码__add__ 后面少了个下划线所以不会递归
我是一只羊 发表于 2020-6-27 17:38
class E(int):
def __add__(self,other):
return self+other
会无限递归的原因是因为:
class E(int):
def __add__(self,other):
return self+other
a = E(3)
b = E(3)
print(a+b)
最先开始 你 print 那+号会使得你自动调用 E类的 __add__ 方法,然后执行返回 self+other,而 这里的加法又一次调用了 E 类的 __add__ 方法,导致无限递归
而你加上 int 后的值 就不属于 int 方法,也就是加上 int 后你调用的是父类 int 的 __add__ 方法,而不是自己的 __add__ 方法 所以不会产生无限递归 Twilight6 发表于 2020-6-27 17:44
会无限递归的原因是因为:
对,我当时也是这一点迷{:10_266:} 小甲鱼的铁粉 发表于 2020-6-27 18:14
对,我当时也是这一点迷
我差点也别开始的虚晃一枪给骗了居然少了个下划线
页:
[1]