只爱整活周淑怡 发表于 2020-8-19 09:46:26

关于算术方法 求看看

小甲鱼的视频里提到了一下
class Newint(int):
    def __add__(self,other):
      return int(self)+int(other)
    def __sub__(self,other):
      return int(self)-int(other)

class Newint(int):
    def __add__(self,other):
      return self+other
    def __sub__(self,other):
      return self+other
上面这段代码能正常运行 但下面这段却因为无限递归报错了前面那段每次都调出了+号不也是递归吗为什么前面这个就没有报错??

zltzlt 发表于 2020-8-19 09:47:10

因为前面调用的是 int 的 __add__ 方法,让 int 类处理呀

qiuyouzhi 发表于 2020-8-19 09:47:42

第一个是int(self) + int(other),调用的就是int类的__add__方法了。
__sub__同理。

Twilight6 发表于 2020-8-19 10:05:19


第一个调用的是 int 类的方法,正常执行

而第二个代码,因为你方法内还有self+other ,和 self+other ,你调用其中一个就会因为方法中还是有 + 法 和 - 法而重新调用自身,导致再次调用,陷入无限递归中去


只爱整活周淑怡 发表于 2020-8-19 12:58:38

Twilight6 发表于 2020-8-19 10:05
第一个调用的是 int 类的方法,正常执行

而第二个代码,因为你方法内还有self+other ,和 self+othe ...

也就是说 self+other 和int(self)+int(other)中的两个+号是不同含义是吧int那个加号是属于int的add方法而前面那个+号是属于我定义的add方法 是这个意思吗

Twilight6 发表于 2020-8-19 13:43:00

只爱整活周淑怡 发表于 2020-8-19 12:58
也就是说 self+other 和int(self)+int(other)中的两个+号是不同含义是吧int那个加号是属于int的add方法 ...




对,这个时候你的直接 + 是调用你自己定义的


页: [1]
查看完整版本: 关于算术方法 求看看