カスタムクラスの2つのオペランドの演算子オーバーライドのしくみを理解しようとしています。例えば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
上記の2つの操作は厄介なようです。カスタムクラスのメンバが加算式の "+"の右側にある場合、__radd__
が使用されます。左にある場合は、__add__
が使用されます。 1つのオペランドがAdder
タイプであり、もう1つが他のものである場合、これは式で機能します。あなたが見ることができるように両方のオペランドがカスタムクラスである場合、両方__add__
と__radd__
が
x + y
using __add__()
using __radd__()
Out[110]: 9
と呼ばれています:私はこれを行うと
は、しかし、私は次のような結果を得ます。
私の質問は、この状況をどうやって解き、どのように右手追加機能と左利き追加機能の両方を呼び出すことができるかです。
それは私の理解は '5 + y'をy .__ RADD __(5)' 'を呼び出すべきであるということですか? – MadPhysicist