最近、Pythonでオペレータのオーバーロードについて学びました。次のことが可能かどうかを知りたいと思います。オペレータがオペレータの右側にあるオブジェクトでPythonでオーバーロードする
次の仮説/考案クラスを検討してください。
class My_Num(object):
def __init__(self, val):
self.val = val
def __add__(self, other_num):
if isinstance(other_num, My_Num):
return self.val + other_num.val
else:
return self.val + other_num
私は上記の書かれている方法は、私はこの
n1 = My_Num(1)
n2 = My_Num(2)
n3 = 3
print n1 + n2
print n1 + n3
のようなものを行うことができますし、期待通りに、それらが動作することを知っています。また、私はこの
n1 = My_Num(1)
n2 = 2
print 2 + n1
を行うことはできませんそれは現在書かれている方法は、この問題を回避とにかくがあることを知っていますか?私はこの例が考案されていることを知っていますが、オペレータのオーバーロードを行ったときに、オペレータを定義するクラスをオペレータの右側に表示することができれば、非常に便利なアプリケーションがあります。これはPythonで可能ですか?
ありがとう)それを可能にするのは__radd__だけですか?アプリケーションのためにオーバーロードする必要がある特定の演算子は、>>演算子と<<演算子です。私はその運営者のためにこれをやりたいのですか? – martega
あなたはリンクをクリックしましたか? '__rrshift__'などがあります。 – senderle
各クラスに対してどの演算子が定義されているかを制御することで、限られた範囲で比較することは可能です。例えば、AとBは__lt__しか定義されていません。 A Aは、リトルエンドに属するメソッドを呼び出します。 –