2014-10-02 44 views
0

我不明白v1v2之间的+运算符如何导致在下面的代码中调用函数add关于Python中运算符重载的查询

self.a = a 
self.b = b 

def __str__(self): 
    return 'Vector (%d, %d)' % (self.a, self.b) 

def __add__(self,other): 
    return Vector(self.a + other.a, self.b + other.b) 

v1 = Vector(2,10) 
v2 = Vector(5,-2) 

print v1 + v2 

感谢

回答

3

翻译时看到的是你要的东西添加到Vector对象时,它会检查对象是否有一个名为__add__()方法。如果是这样,解释器调用该方法,传递两个操作数。该方法的返回值是操作的结果。

对于每个可以超载的操作员,都有一个magic method可以执行操作。

这个解释被简化了,因为右边的操作数(在你的例子中为v2)也可能超载操作。还有就地操作员的特殊规定,如+=other complications