薬薬薬加油 发表于 2022-5-6 15:55:55

12.2.2 反运算

本帖最后由 薬薬薬加油 于 2022-5-6 15:59 编辑

class Nint(int):
    def __radd__(self, other):
      return int.__sub__(other, self)
   
a = Nint(5)
b = Nint(3)
a + b# 这里返回的是5 -3 = 2
1 + b# 这里返回的是1 + 3 = 4

readd()函数返回的不是减吗,这里我得到的结果是2,而书上结果是8,有点看不懂

python爱好者. 发表于 2022-5-6 15:58:06

class Nint(int):
    def __radd__(self, other):
      return int.__radd__(other, self) #改了这里
   
a = Nint(5)
b = Nint(3)
a + b

isdkz 发表于 2022-5-6 15:58:46

class Nint(int):
    def __radd__(self, other):
      return int.__sub__(other, self)
   
a = Nint(5)
b = Nint(3)
print(a + b)

这个代码的结果就是 8 呀,你是怎么得到的结果?

薬薬薬加油 发表于 2022-5-6 16:01:33

isdkz 发表于 2022-5-6 15:58
这个代码的结果就是 8 呀,你是怎么得到的结果?

啊?我复制你的代码得到的结果还是2{:10_277:}

isdkz 发表于 2022-5-6 16:02:26

薬薬薬加油 发表于 2022-5-6 16:01
啊?我复制你的代码得到的结果还是2

你是用的 pycharm ?

Twilight6 发表于 2022-5-6 16:02:54

薬薬薬加油 发表于 2022-5-6 16:01
啊?我复制你的代码得到的结果还是2



你重启下编辑器,然后再次运行代码,应该就没问题了

薬薬薬加油 发表于 2022-5-6 16:04:38

isdkz 发表于 2022-5-6 16:02
你是用的 pycharm ?

我用Pycharm试了一下确实是8,之前用的Jupyter Notebook得到的结果确实是2,这是为啥呀?

薬薬薬加油 发表于 2022-5-6 16:08:10

Twilight6 发表于 2022-5-6 16:02
你重启下编辑器,然后再次运行代码,应该就没问题了

真的是这样,谢谢!

isdkz 发表于 2022-5-6 16:09:29

薬薬薬加油 发表于 2022-5-6 16:04
我用Pycharm试了一下确实是8,之前用的Jupyter Notebook得到的结果确实是2,这是为啥呀?

你运行一个 cell 就好了,是没有问题的,

可能你还执行了别的 cell 重新赋值 a 或 b 了,

薬薬薬加油 发表于 2022-5-6 16:09:49

python爱好者. 发表于 2022-5-6 15:58


谢谢!

薬薬薬加油 发表于 2022-5-6 16:10:19

isdkz 发表于 2022-5-6 16:02
你是用的 pycharm ?

谢谢!

Twilight6 发表于 2022-5-6 16:11:15

薬薬薬加油 发表于 2022-5-6 16:08
真的是这样,谢谢!



Jupyter Notebook 运行会将之前的定义保存在内存,前面调用过的代码会遗留

要完整的重新定义就可以正常执行,否则就会调用之前定义的

isdkz 发表于 2022-5-6 16:12:58

薬薬薬加油 发表于 2022-5-6 16:10
谢谢!

你用 jupyter 的话最好要重新执行整个代码,

因为 jupyter 你可能把执行顺序搞乱了,

可能之前定义的类已经被重新定义过了

薬薬薬加油 发表于 2022-5-6 16:20:00

isdkz 发表于 2022-5-6 16:12
你用 jupyter 的话最好要重新执行整个代码,

因为 jupyter 你可能把执行顺序搞乱了,


好的好的,非常感谢

薬薬薬加油 发表于 2022-5-6 16:20:36

Twilight6 发表于 2022-5-6 16:11
Jupyter Notebook 运行会将之前的定义保存在内存,前面调用过的代码会遗留

要完整的重新定义就可 ...

好的好的,非常感谢!
页: [1]
查看完整版本: 12.2.2 反运算