鱼C论坛

 找回密码
 立即注册
查看: 3444|回复: 6

[已解决]43讲关于python反运算的

[复制链接]
发表于 2018-2-5 15:53:36 | 显示全部楼层 |阅读模式
10鱼币
小甲鱼的例子是
class Nint(int):
        def __radd__(self,other):
                return int.__sub__(self,other)

a=Nint(4)
1+a得到的结果是3
但是按照我的理解1应该是int类的一个实例对象啊,1+a可以调用1这个对象的add方法的啊
最佳答案
2018-2-5 15:53:37
自定义的类方法操作优先级高于系统常量的方法

最佳答案

查看完整内容

自定义的类方法操作优先级高于系统常量的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 15:53:37 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
自定义的类方法操作优先级高于系统常量的方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-5 16:18:29 | 显示全部楼层
BngThea 发表于 2018-2-5 16:03
自定义的类方法操作优先级高于系统常量的方法

可是按照python无处不对象的观点,1应该是int类的一个实例对象啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 16:26:27 | 显示全部楼层
1 的确是 int 的一个实例对象,按照楼上的说法,自定义的类方法优先级比int的方法要高,所以会先去调用自定义类
中的方法,没有再调用 int 里的方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-2-5 16:44:37 | 显示全部楼层
°蓝鲤歌蓝 发表于 2018-2-5 16:26
1 的确是 int 的一个实例对象,按照楼上的说法,自定义的类方法优先级比int的方法要高,所以会先去调用自定 ...

能不能说的稍微详细与规范一点点,有点感觉了谢谢了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 16:48:37 | 显示全部楼层
开个丸笑 发表于 2018-2-5 16:44
能不能说的稍微详细与规范一点点,有点感觉了谢谢了

你 1 是 int类型的, int是系统内部函数, a 是由你自定义也就是你自己后来写的类实例化的一个对象,所以进行
1 + a 时,由于自定义方法的优先级高,系统会优先去 a 里面找有没有__radd__() 方法,有的话就调用,你这里的 a 是由的,所以
1 + a 这个 + 号调用的是 a 里的那个方法。如果没有,就会调用 1 里面的 __add()__方法了。大概意思就是这样。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 20:03:28 From FishC Mobile | 显示全部楼层
开个丸笑 发表于 2018-2-5 16:18
可是按照python无处不对象的观点,1应该是int类的一个实例对象啊

类方法调用顺序上变量的优先级高于常量
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 06:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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