2014-10-02 26 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