self.p * r.q + self.q * r.p, self.q * r.q
在这里面self和r都代表什么呢?
>>> r1 = Rational(1, 2) 运行这段时,self指代实例r1,self.p=1,self.q=2, 得出: 1*r.q+2*r.p, 2*r.q 这里面的r指代r2吗?为什么程序知道 def __add__(self, r)的r指代r2呢? >>> r2 = Rational(2, 3) 运行这段时,self又指代实例r2了,感觉很困惑
r1 = Rational(1, 2)
这里是调用了Rational类的__init__方法创建了一个实例,然后将这个实例赋予给了r1;
self.p * r.q + self.q * r.p, self.q * r.q
这是调用了r1这个实例的__add__方法,self是指实例本身也就是r1,而r这个参数就是指代r2,下文两个语句是等价的
print(r1+r2) print(r1.__add__(r2))
从这地方引申出来,假设还有一个r3,那程序是怎么跑的呢
r1 = Rational(1, 2) r2 = Rational(2, 3) r3 = Rational(3, 4) print(r1+r2+r3)
程序会先算r1+r2,然后再用这个算出的结果x去+r3