現在、a+b
とa.__add__(b)
の違いは、カスタムクラスの場合です。 '+'演算子を使用すると特別なメソッド__add__
が使用されるというWebサイトが数多くあります。a + bと.__ addの違い__(b)
しかし、次の例を実行すると2つの異なる結果が得られます。
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))
結果:
/1+c
Pythonのチェックを実行INT
__add__
方法を実行する際に、私は、理解ものから今
C.__radd__ <C object at 0x7f60b92e9550> 1
reversed result
NotImplemented
NotImplemented
- 戻るNotImplemented - INTを追加し、Cのオブジェクトはのための実装がないことを認めます - PythonはオブジェクトCのチェックを行い、__radd__
のコードを実行します。
1+c
は__radd__
コードを実行しますが、他の2つのバージョンはNotImplemented
を返すだけで、なぜ__radd__
というコードが返されますか?
あなたは '__add__'を直接呼び出したので、あなたが述べるように、Pythonは '+'演算子を使用するときにのみフォールバックを行います。 –
私が '__add__'を直接使用した場合、フォールバックは使用されないことに気づいていませんでした。 – Korred