3

Pythonでは、を定義することで、クラスの操作(たとえば、加算)をオーバーライドできます__add__。これにより、他の値/インスタンスでクラスインスタンスを追加できるようになりますが、組み込みをインスタンスに追加することはできません。

foo = Foo()
bar = foo + 6 # Works
bar = 6 + foo # TypeError: unsupported operand type(s) for +: 'int' and 'Foo'

これを有効にする方法はありますか?

4

2 に答える 2

6

インスタンスが右側にあるときに__radd__(self, other)演算子をオーバーライドするメソッドを定義する必要があります。+

于 2012-10-20T17:35:08.320 に答える
4

整数の+演算子をオーバーライドすることはできません。あなたがすべきことは、Fooクラス__radd__(self, other)の関数のみをオーバーライドすることです。変数は整数ではなくインスタンスを参照し、変数は+演算子の左側にあるオブジェクトを参照します。が評価されると、評価の試行は失敗し、Pythonは試行します(reverse )。の内部をオーバーライドすると、その逆が成功し、の評価はの結果になります。selfFoootherbar = 6 + foo6.__add__(foo)foo.__radd__(6)__add____radd__Foo__add__6 + foofoo.__radd__(6)

def __radd__(self, other):
   return self + other
于 2012-10-20T17:48:58.027 に答える