鱼C论坛

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

请教:__radd__问题

[复制链接]
发表于 2018-2-2 17:51:29 | 显示全部楼层 |阅读模式

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

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

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


为什么  a = Nint(5)     b = Nint(3)
1 + b = 2?
他不会让 1 执行原来int的方法来计算么

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

这样 1 + a 是打印 6

求大神解释下
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-2 18:30:21 From FishC Mobile | 显示全部楼层

回帖奖励 +3 鱼币

自定义的类对象优先级高于系统原有常量类型
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-3 09:52:16 | 显示全部楼层
BngThea 发表于 2018-2-2 18:30
自定义的类对象优先级高于系统原有常量类型

soga谢谢
python会先遍历你输入的所有对象再做决定是吗?就算你自定义的类在系统原有常亮后面
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-3 14:44:21 From FishC Mobile | 显示全部楼层
lolykong 发表于 2018-2-3 09:52
soga谢谢
python会先遍历你输入的所有对象再做决定是吗?就算你自定义的类在系统原有常亮后面 ...

你可以这样理解
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-3 15:59:42 | 显示全部楼层
在你这个程序里,当运行 a + 1/b+1 时,会查找你自定义类中是否有__add__()方法,有就调用,
当运行 1 + a / 1 + b 时,会查找你自定义类中是否有__radd__()方法,有就调用。
也就是说进行运算时优先调用你自定义类中的方法,而且会根据自定义的类对象的位置进行选择调用哪一种方法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-4 08:09:45 From FishC Mobile | 显示全部楼层
本帖最后由 了解2号 于 2018-2-4 08:26 编辑

据我所知,1+a并没有执行__add__方法,他会自动调用a 的radd方法,如果此时也没有定义radd方法的话,那add方法不会执行;你可以在里面加一行代码,打印一下。因为数字1是常量,不像对象,他是没有方法调用的。不会说1+a 时会调用1的add方法(1没有add方法,他是常量),他只会看有没有a的radd方法,有就调用这个radd方法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-4 14:31:11 | 显示全部楼层
BngThea 发表于 2018-2-3 14:44
你可以这样理解

了解,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-4 14:32:06 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-3 15:59
在你这个程序里,当运行 a + 1/b+1 时,会查找你自定义类中是否有__add__()方法,有就调用,
当运行 1 + a  ...

了解 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-2-4 14:32:47 | 显示全部楼层
了解2号 发表于 2018-2-4 08:09
据我所知,1+a并没有执行__add__方法,他会自动调用a 的radd方法,如果此时也没有定义radd方法的话,那add ...

OK,我尝试下 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-27 16:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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