鱼C论坛

 找回密码
 立即注册
查看: 1369|回复: 8

[已解决]python魔法方法求解?

[复制链接]
发表于 2020-7-6 19:02:32 | 显示全部楼层 |阅读模式

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

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

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


a = Nint(5)
1+a为啥会调用反运算啊,1的int类里不是有add的方法吗?为啥会调用反运算啊?
最佳答案
2020-7-6 19:15:59

反运算符:仅当左操作数不支持相应的操作且操作数类型不同时才调用这些函数。

因为 int 不支持和一个实例对象进行相加,int 只支持整型相加,所以调用的是Nint的反运算符方法:

>>> print(type(a))
<class '__main__.Nint'>



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

使用道具 举报

发表于 2020-7-6 19:15:59 | 显示全部楼层    本楼为最佳答案   

反运算符:仅当左操作数不支持相应的操作且操作数类型不同时才调用这些函数。

因为 int 不支持和一个实例对象进行相加,int 只支持整型相加,所以调用的是Nint的反运算符方法:

>>> print(type(a))
<class '__main__.Nint'>



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

使用道具 举报

 楼主| 发表于 2020-7-6 19:32:05 | 显示全部楼层
Twilight6 发表于 2020-7-6 19:15
反运算符:仅当左操作数不支持相应的操作且操作数类型不同时才调用这些函数。

因为 int 不支持和一个 ...

大佬,我不太明白。那1+a反运算那也是调用int的sub方法啊,那减法也不支持对象减去整形啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 19:41:51 | 显示全部楼层
lingedu 发表于 2020-7-6 19:32
大佬,我不太明白。那1+a反运算那也是调用int的sub方法啊,那减法也不支持对象减去整形啊
>>> class A(int):
        def __radd__(self, other):
                print(self, other)
                return int.__sub__(self, other)

        
>>> a = A(5)
>>> a
5
>>> type(a)
<class '__main__.A'>
>>> 1 + a
5 1
4
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 19:42:36 | 显示全部楼层
lingedu 发表于 2020-7-6 19:32
大佬,我不太明白。那1+a反运算那也是调用int的sub方法啊,那减法也不支持对象减去整形啊




但是你 传入实例对象的 参数就是 int 类型的值,然后再 __add__里面调用时候就是两个 int 类型的值相互运算了



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

使用道具 举报

发表于 2020-7-6 20:33:26 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-7-6 20:45 编辑
lingedu 发表于 2020-7-6 19:32
大佬,我不太明白。那1+a反运算那也是调用int的sub方法啊,那减法也不支持对象减去整形啊

1+a反运算那也是调用int的sub方法啊
可是 a+1!=1-a 啊?

点评

哈哈~  发表于 2020-7-6 20:46
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-6 20:44:04 | 显示全部楼层



你忘记你 6 月 25 号发的记录了嘛,我要监督你哈哈

点评

已更改  发表于 2020-7-6 20:45
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-20 03:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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