web-dev-qa-db-ja.com

Python:乗算オーバーライド

それで、intで動作する__mul__関数を持つカスタムクラスを取得しました。ただし、私のプログラム(ライブラリ)では、逆の方法で呼び出されています。つまり、2 * xで、xは私のクラスのものです。これに__mul__関数を使用させる方法はありますか?

35
Colin DeClue

次のコードをクラス定義に追加するだけで問題ありません。

__rmul__ = __mul__
39
Karl Knechtel

実装__rmul__ 同様に。

class Foo(object):
    def __mul__(self, other):
        print '__mul__'
        return other
    def __rmul__(self, other):
        print '__rmul__'
        return other

x = Foo()
2 * x # __rmul__
x * 2 # __mul__
26
Cat Plus Plus