我想了解操作符重寫如何爲自定義類的兩個操作數工作。在Python中重寫對於相同類操作數的交換操作
舉例來說,假設我有以下幾點:
class Adder:
def __init__(self, value=1):
self.data = value
def __add__(self,other):
print('using __add__()')
return self.data + other
def __radd__(self,other):
print('using __radd__()')
return other + self.data
我初始化以下變量:
x = Adder(5)
y = Adder(4)
,然後繼續執行以下操作:
1 + x
using __radd__()
Out[108]: 6
x + 2
using __add__()
Out[109]: 7
的以上兩個操作似乎很直接。如果我的自定義類的成員位於添加表達式中的「+」的右側,則使用__radd__
。如果它在左側,則使用__add__
。這適用於表達式,其中一個操作數的類型爲Adder
,另一個操作數是其他。
當我做到這一點,但是,我得到以下結果:
x + y
using __add__()
using __radd__()
Out[110]: 9
正如你可以看到,如果兩個操作數是自定義類的,那麼這兩個__add__
和__radd__
被調用。
我的問題是Python如何解開這種情況,它如何能夠調用右手加法函數以及左手加法函數。
這是我的理解是'5 + y'應該叫回答'y .__ RADD __(5)'? – MadPhysicist