鬼少 发表于 2024-10-12 15:04:18

关于python的反运算问题

先定义如下的类,
class Nint(int):
    def __raddr__(self,other):
      return int.__sub__(self,other)

   
a = Nint(3)
a
3
b = Nint(5)
b
5
a + b
8
1 + b
6
1+b
6

当执行”1 + b“的时候结果应该为4 才对, 为何结果是6呢?

鬼少 发表于 2024-10-12 15:08:53

def __raddr__   此处定义的有错误, 应该定义为”__radd__“才对

FishC 发表于 2024-10-12 15:11:02

这是因为你在类中写了一个名称错误的反运算函数 `__raddr__`,导致这个方法没有被调用。Python 其实在做 `1 + b` 运算时使用了普通的加法运算符 `+`,而不是你想要的反加法运算。

在 Python 中,加法的反运算函数应该是 `__radd__` 而不是 `__raddr__`。所以你需要将方法定义为:

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

这样,当执行 `1 + b` 时,就会调用 `__radd__` 方法,结果会变为 `4`。另外,请确认 `__sub__` 的使用是否正确无误,以确保你实际想要的行为。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼的二师兄 发表于 2024-10-12 17:56:12

1 + b 执行的是 1 的 __add__,整数是 int 对象。
页: [1]
查看完整版本: 关于python的反运算问题