我是一只羊 发表于 2020-6-27 16:53:17

课件魔法方法:算数运算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吗?

Twilight6 发表于 2020-6-27 17:04:50



并不会无限递归

class Try_int(int):
    def __add_(self, other):
      return self + other


a = Try_int(3)
b = Try_int(3)
print(a + b)

我是一只羊 发表于 2020-6-27 17:38:30

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)
这样就会。我感觉和刚才的代码也没啥差别就是取名不一样啊

Twilight6 发表于 2020-6-27 17:40:35

我是一只羊 发表于 2020-6-27 17:38
class E(int):
        def __add__(self,other):
                return self+other




。。。 我知道了你原先的代码 和我发的代码__add__ 后面少了个下划线所以不会递归


Twilight6 发表于 2020-6-27 17:44:12

我是一只羊 发表于 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__ 方法 所以不会产生无限递归

小甲鱼的铁粉 发表于 2020-6-27 18:14:04

Twilight6 发表于 2020-6-27 17:44
会无限递归的原因是因为:




对,我当时也是这一点迷{:10_266:}

Twilight6 发表于 2020-6-27 18:40:57

小甲鱼的铁粉 发表于 2020-6-27 18:14
对,我当时也是这一点迷

我差点也别开始的虚晃一枪给骗了居然少了个下划线
页: [1]
查看完整版本: 课件魔法方法:算数运算1中看不懂