开个丸笑 发表于 2018-2-5 15:53:36

43讲关于python反运算的

小甲鱼的例子是
class Nint(int):
        def __radd__(self,other):
                return int.__sub__(self,other)

a=Nint(4)
1+a得到的结果是3
但是按照我的理解1应该是int类的一个实例对象啊,1+a可以调用1这个对象的add方法的啊

BngThea 发表于 2018-2-5 15:53:37

自定义的类方法操作优先级高于系统常量的方法

开个丸笑 发表于 2018-2-5 16:18:29

BngThea 发表于 2018-2-5 16:03
自定义的类方法操作优先级高于系统常量的方法

可是按照python无处不对象的观点,1应该是int类的一个实例对象啊

°蓝鲤歌蓝 发表于 2018-2-5 16:26:27

1 的确是 int 的一个实例对象,按照楼上的说法,自定义的类方法优先级比int的方法要高,所以会先去调用自定义类
中的方法,没有再调用 int 里的方法。

开个丸笑 发表于 2018-2-5 16:44:37

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

能不能说的稍微详细与规范一点点,有点感觉了谢谢了

°蓝鲤歌蓝 发表于 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()__方法了。大概意思就是这样。

BngThea 发表于 2018-2-5 20:03:28

开个丸笑 发表于 2018-2-5 16:18
可是按照python无处不对象的观点,1应该是int类的一个实例对象啊

类方法调用顺序上变量的优先级高于常量
页: [1]
查看完整版本: 43讲关于python反运算的