大神或老师请进来解答一下,不胜感激
学了那么久,这节算是自己没法搞懂的一节了,所以有了这次的提问。
def __add__(self, r):
return Rational(self.p * r.q + self.q * r.p, self.q * r.q)
>>> r1 = Rational(1, 3)
>>> r2 = Rational(1, 2)
>>> print r1 + r2
5/6
先说我懂的好了,教程说:如果要让Rational进行+运算,需要正确实现__add__。那好,那么在print r1 + r2
时,我理解的因为+号,所以调用了__add__(self, r)方法。但是此方法传进来的参数相当于只有一个参数r,但是实际要实现的是r1+r2,这不是两个参数吗?到底传进来的机制是怎么样的。
然后是传进去后的结果,看了大家的说法,我现在理解的(self.p * r.q + self.q * r.p, self.q * r.q),把它们用数字实际对上后,应该是(1*2+3*1,3*2),这样得到的是(5,6),跟输出结果很符合。
但正是因为上个疑问,传入的参数问题我感觉理解不是很清楚,所以我对(self.p * r.q + self.q * r.p, self.q * r.q)对应的是(1*2+3*1,3*2)感到疑惑,为何self.p self.q 对应的是r1的分子分母,r 对应的则是r2的分子分母,难道参数传进来的时候把r1传给了self,把r2传给了r?我感觉这种理解显然是不对的。
当然实际上式子对应的数字是不是我所想的那样我也不确定,所以有错的话欢迎指出。
有哪位大神对这些理解的比较好的,请不吝解答,当然如果老师给我解答那也再好不过了。