我目前正試圖瞭解在使用a+b
和a.__add__(b)
之間的區別是什麼時候涉及到自定義類。有很多網站表示使用'+' - 運算符會導致使用特殊方法__add__
- 目前爲止這很好。a + b和.__之間的區別__(b)
但是,當我運行下面的例子,我得到了兩個不同的結果。
class C:
def __add__(self, other):
print("C.__add__", self, other)
return "result"
def __radd__(self, other):
print("C.__radd__", self, other)
return "reversed result"
c = C()
print(1+c)
print()
print(1 .__add__(c))
print(int.__add__(1,c))
結果:
C.__radd__ <C object at 0x7f60b92e9550> 1
reversed result
NotImplemented
NotImplemented
從我的理解,執行
1+c
Python的檢查時/執行INT
__add__
方法
現在 - 發現有添加int和C對象沒有實現 - 回報NotImplemented - 讓Python知道檢查對象C的__radd__
並執行其中的代碼。
爲什麼1+c
結果在執行__radd__
代碼,但其他兩個版本都只是返回NotImplemented
不檢查__radd__
?
呃,因爲你直接調用了__add__?正如你所說的,當你使用'+'運算符時,Python只會回退。 –
猜測我不知道如果直接使用'__add__',則不會使用回退。 – Korred