鱼C论坛

 找回密码
 立即注册
查看: 2994|回复: 26

[已解决]关于43课魔法方法__radd__():的困惑

[复制链接]
发表于 2018-3-31 16:46:01 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 清风揽月shine 于 2018-3-31 16:47 编辑

问题如图中所示!
最佳答案
2018-4-1 16:48:59
1有add也有radd,在加号左边适用add,但是右边有重写radd定义的b的,
因此按照b的radd来
2345截图20180331164708.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-3-31 17:52:51 From FishC Mobile | 显示全部楼层

回帖奖励 +2 鱼币

变量优先级高于常量
自定义类型优先级高于内置类型
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-31 18:39:45 | 显示全部楼层
你的解释不对吧
2345截图20180331184141.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-31 18:40:26 | 显示全部楼层
BngThea 发表于 2018-3-31 17:52
变量优先级高于常量
自定义类型优先级高于内置类型

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

使用道具 举报

 楼主| 发表于 2018-3-31 18:40:58 | 显示全部楼层
大佬们呢  快来帮帮我啊  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-31 18:47:12 | 显示全部楼层

回帖奖励 +2 鱼币

本帖最后由 a690089735 于 2018-3-31 18:48 编辑

这段小甲鱼讲错了

如图:

QQ截图20180331163512.png

不过理解意思就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-3-31 18:48:58 | 显示全部楼层
a690089735 发表于 2018-3-31 18:47
这段小甲鱼讲错了

如图:

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

使用道具 举报

发表于 2018-3-31 19:26:40 | 显示全部楼层

回帖奖励 +2 鱼币

1 + b : 1是左操作数,b是右操作数。
老师的意思是左操作数不支持(所谓的不支持就好比常量1)加法操作时(左操作数的魔法方法是 __add__),由右操作数做主(右操作数的魔法方法是 __radd__ )

20170904105913261.jpg

>>> class Lint(int):
        def __add__(self,other):
                return int.__add__(self,other)

>>> class Rint(int):
        def __radd__(self,other):
                return int.__sub__(self,other)
       
>>> a = Lint(1)
>>> b = Rint(2)
>>> a+b
3
>>> a = int(1)
>>> a+b
1
在上面的例子中,只有当 a 没有定义 __add__ 时 b.__radd__ 才会被调用。


评分

参与人数 1荣誉 +1 鱼币 +5 贡献 +1 收起 理由
清风揽月shine + 1 + 5 + 1 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

发表于 2018-3-31 20:23:59 | 显示全部楼层

回帖奖励 +2 鱼币

add你定义的在左边调用
radd在右侧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-31 21:33:14 From FishC Mobile | 显示全部楼层
清风揽月shine 发表于 2018-3-31 18:40
看楼下

受教,我一直是这样认为的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-3-31 21:41:00 | 显示全部楼层

回帖奖励 +2 鱼币

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

使用道具 举报

 楼主| 发表于 2018-4-1 08:30:26 | 显示全部楼层
ba21 发表于 2018-3-31 19:26
1 + b : 1是左操作数,b是右操作数。
老师的意思是左操作数不支持(所谓的不支持就好比常量1)加法操作时( ...

常量不就是int型嘛   这样的话 不是具有__add__的功能吗  所以对于你的解释我是不能理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 09:41:00 | 显示全部楼层
清风揽月shine 发表于 2018-4-1 08:30
常量不就是int型嘛   这样的话 不是具有__add__的功能吗  所以对于你的解释我是不能理解

根据实例,我想应该是定义 __add__

上面代码实例表现的很清楚了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-1 16:35:02 | 显示全部楼层
ba21 发表于 2018-4-1 09:41
根据实例,我想应该是自定义 __add__

上面代码实例表现的很清楚了。

如果这么认为  也是对的 哈   可是我们要是在你那个代码的运行结果下 计算 3+5 这个常量   并不会报出你那个流程图上的typeerror  这个怎么理解呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-1 16:38:44 | 显示全部楼层
@冬雪雪冬  大佬来帮我  看下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 16:48:59 | 显示全部楼层    本楼为最佳答案   
1有add也有radd,在加号左边适用add,但是右边有重写radd定义的b的,
因此按照b的radd来

评分

参与人数 1荣誉 +1 鱼币 +5 贡献 +1 收起 理由
清风揽月shine + 1 + 5 + 1 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2018-4-1 16:58:36 | 显示全部楼层
塔利班 发表于 2018-4-1 16:48
1有add也有radd,在加号左边适用add,但是右边有重写radd定义的b的,
因此按照b的radd来

当对象A的__add__的方法不能实现或者不支持相应的操作的时候才会查找b对象的__radd__方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 17:06:40 | 显示全部楼层
清风揽月shine 发表于 2018-4-1 16:58
当对象A的__add__的方法不能实现或者不支持相应的操作的时候才会查找b对象的__radd__方法

恩。感觉你已经明白差不多了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-1 18:27:49 | 显示全部楼层
塔利班 发表于 2018-4-1 17:06
恩。感觉你已经明白差不多了

其实我感觉 这句话定义的很模糊  而且解释半天不能明了 如果按照你的解释很明了 但是未曾看到有如此定义  但我觉得你给的比较接近我想要的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-1 23:21:09 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 12:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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