Alex_Cai 发表于 2020-11-23 21:24:23

第二个3 + a 结果为什么不是2 而是8(未Restart shell)

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

a = Nint(5)
3 + a

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

a = Nint(5)
3 + a

Twilight6 发表于 2020-11-23 21:51:41


__rsub__ 是当只有左边对象不允许操作时,自动调用这个方法

而你第二个继承了 int ,没有重写 __radd__ ,而只重写了 __rsub__ 那么就只有反减法的运算符

但是你测试对象是 3 + a 是加法运算符,所以不会调用 __rsub__,调用的是 __radd__

测试对象改成 3 - a 就会发现结果是 2 ,不是-2 了
页: [1]
查看完整版本: 第二个3 + a 结果为什么不是2 而是8(未Restart shell)