鱼C论坛

 找回密码
 立即注册
查看: 2307|回复: 1

Python 第43课:算数2,反运算

[复制链接]
发表于 2021-3-12 11:15:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Peteryo01223 于 2021-3-12 13:59 编辑

视频中第5至6分钟,Fish C 举的反运算例子
class Nint(int):
        def __radd__(self, other):
                return int.__sub__(self, other)
run后结果
>>> a = Nint(5)
>>> b = Nint(3)
>>> a + b # 没有触发反运算 __radd__ 方法
8
>>> 1 + b # 触发了反运算 __radd__ 方法。这里 self 是变量 b, other 是常数 1
2

Fish C 解释说:
  • 因为 Python 找得到 a,也找得到 b,所以 a+b 不能触发 __radd__方法,故此 Python 按原本的 __add__ 方法运算,得出 8。
  • 反之,因 Python 在 1+b 中找不到 a,所以就触发了反运算 __radd__方法,得到了结果 2。

请问:
Python 哪里规定过:找不到 a 就触发反运算,反之不触发?费解。
我猜想,是不是因为:class 中定义过 self 和 other 两个变量,所以只要运算时出现了两个变量,即不能“触发”?但是,这逻辑,貌似也不通。求教!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-3-12 16:54:38 | 显示全部楼层
没有人帮助么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 16:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表