鱼C论坛

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

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

[复制链接]
发表于 2020-11-23 21:24:23 | 显示全部楼层 |阅读模式

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

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

x
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
最佳答案
2020-11-23 21:51:41

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

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

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

测试对象改成 3 - a 就会发现结果是 2 ,不是  -2 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-23 21:51:41 | 显示全部楼层    本楼为最佳答案   

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

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

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

测试对象改成 3 - a 就会发现结果是 2 ,不是  -2 了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 14:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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