lzone 发表于 2020-3-25 17:09:51

魔法方法的 __add__(self, other) 实现过程求助!



永恒的蓝色梦想 发表于 2020-3-25 17:15:27

a+b要怎样理解是什么意思?
a+b就是a.__add__(b)啊

sunrise085 发表于 2020-3-25 17:23:06

你的理解是对的。
int.__sub__(self,other)就是调用int的__sub__函数。

a和b是New_int类的对象,在该类中对运算符+和-进行了重载,
执行a+b 时,就会调用该类中重载的__add__函数,
__add__函数中调用了int类的int.__sub__函数,并将其返回值作为此函数的返回值
相当于以下写法
        def __add__(self,other):
                c=int.__sub__(self,other)
                return c

zltzlt 发表于 2020-3-25 17:23:16

int.__sub__() 就是调用 int 类的减法操作,第一个参数是被减数,第二个参数是减数

在这里 self 是被减数,other 是减数

flamezyy 发表于 2020-3-25 17:24:38

a+b先尝试调用a的add方法,a传入self,b传入other,返回的是父类int的sub方法,于是返回int__sub__(a,b),就是a-b

lzone 发表于 2020-3-25 17:30:50

永恒的蓝色梦想 发表于 2020-3-25 17:15
a+b要怎样理解是什么意思?
a+b就是a.__add__(b)啊

a+b 不是会调用到 def __add__(self, other) 这个函数吗。但是返回值设置的是int.__sub__(self, other) , 结果就变成了a-b,但是这个过程该怎么解释呢,就像数学题,知道答案,但是过程不知道怎么算的,我就是想知道这个过程该是怎么做到的!

Stubborn 发表于 2020-3-25 17:48:20

class Myint:

    def __init__(self, number):
      self.number = number

    def __add__(self, other):
      return self.number + other.number


a = Myint(5)
b = Myint(6)
print(a+b)

lzone 发表于 2020-3-25 17:50:14

sunrise085 发表于 2020-3-25 17:23
你的理解是对的。
int.__sub__(self,other)就是调用int的__sub__函数。



谢谢你的回答很专业,不过有一点可能我是刚学习Python所有有很多还是不懂得,一开始我看不懂int类的__sub__函数代表的是什么意思,刚刚看了int类的__sub__(self, other)方法,他的返回值是self-other,看了这个突然觉就醒悟过来了!感谢指点!

lzone 发表于 2020-3-25 17:53:28

zltzlt 发表于 2020-3-25 17:23
int.__sub__() 就是调用 int 类的减法操作,第一个参数是被减数,第二个参数是减数

在这里 self 是被减 ...

感谢指导,现在理解了!

lzone 发表于 2020-3-25 17:54:09

flamezyy 发表于 2020-3-25 17:24
a+b先尝试调用a的add方法,a传入self,b传入other,返回的是父类int的sub方法,于是返回int__sub__(a,b),就 ...

感谢指导,现在理解了!

heidern0612 发表于 2020-3-25 17:58:12

lzone 发表于 2020-3-25 17:30
a+b 不是会调用到 def __add__(self, other) 这个函数吗。但是返回值设置的是int.__sub__(self, other) , ...

你现在重写的是不可变int这个类的方法。

通过自定义的方法把加定义为减、减定义为加。

a实例后传入的就是3的值,也就是a就是类定义中的self自己,b就是other了。

同理,b实例后,5就是你传入的self实例值,other就是a了。

求a+b。就相当于a实例3后减了other的b的实例5,结果为-2.

如果求得是b+a的话,b就是self,a就是other,结果就反过来为2了。




lzone 发表于 2020-3-25 18:10:24

heidern0612 发表于 2020-3-25 17:58
你现在重写的是不可变int这个类的方法。

通过自定义的方法把加定义为减、减定义为加。


看懂了,感谢!
页: [1]
查看完整版本: 魔法方法的 __add__(self, other) 实现过程求助!