Yakia 发表于 2020-8-17 16:38:46

关于魔法方法 add/radd 新人小白

本帖最后由 zltzlt 于 2020-8-17 16:40 编辑

class Nint(int):
        def __radd__(self,other):
                return int.__sub__(self,other)

b = Nint(3)

1+b

以上代码,1+b得出2

想问的是1不是本身作为一个int就有自己的add方法吗,上面的代码也没有改变add方法,为什么要用b的radd方法去算1+b?

zltzlt 发表于 2020-8-17 16:39:55

因为 a + b 如果 b 是 a 的子类,那么先调用 b.__radd__(a) 。

在这里 Nint 是 int 的子类,所以先调用 b.__radd__(1)

Yakia 发表于 2020-8-17 16:45:23

zltzlt 发表于 2020-8-17 16:39
因为 a + b 如果 b 是 a 的子类,那么先调用 b.__radd__(a) 。

在这里 Nint 是 int 的子类,所以先调用...

就是说谁是子类就先调用谁的方法吗?

zltzlt 发表于 2020-8-17 16:45:58

Yakia 发表于 2020-8-17 16:45
就是说谁是子类就先调用谁的方法吗?

也可以这样理解

Yakia 发表于 2020-8-17 16:49:30

zltzlt 发表于 2020-8-17 16:45
也可以这样理解

谢谢谢谢!
页: [1]
查看完整版本: 关于魔法方法 add/radd 新人小白