|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 冰封雪舞 于 2017-12-19 00:54 编辑
为了理解魔法方法里边内置函数改写,
我把甲鱼老师的的程序改了几次,
改成这样了,结果更迷糊了,
程序如下:
class New_int(int):
def __add__(self, other):
print('self是%s,other是%s'% (self,other))
other = other + 10
print(self,other)
return int.__add__(self,other)
a = New_int('2')
b = New_int('3')
c = New_int('4')
d = a+b+c
print(b+a+0)
print(d)
结果是:
self是2,other是3
self是3,other是10
3 20
2 23
self是3,other是2
self是2,other是10
2 20
3 22
25
29
我发现每次other=other+10把我搞糊涂了,
为什么实例化时给第一个加号的左右赋值时other会连加,后边再连加,other不连加了?
而且other的值,实例化在计算前它在不断地变化。
如果我把加号放到前边,other就完全失效了,如print(+a+b),而且函数里边的print也不执行了。
换成比较明白的问题说话:
1. 为什么other=other+10,只在a+b中连续加成20,如果是a+b+c或者后边+d+e+f等连续加法中就不累加了?
2.为什么把加号放到前边,如+a+b,这个函数就完全不执行other= other+10的语句了,里边的print语句也不执行了,完全成为正常的加了,得数就是5。
1.因为 a + b 的和是 int 类型的,再 + c 的话调用的是 int 类的__add__方法。
2. +a 应该是前面加 + 号的时候调用了 int 方法,具体我没去查看,不过我猜测应该是这样。
|
|