Pythonでベクトルを表すクラスを(演習として)作成しましたが、組み込み演算子の拡張に問題があります。
__mul__
ベクトルクラスのメソッドを定義しました。問題は、式x * y
でインタプリタが__mul__
yではなくxのメソッドを呼び出すことです。
したがってvector(1, 2, 3) * 2
、ベクトル<2、4、6>を必要に応じて返します。2 * vector(1, 2, 3)
ただし、組み込みのintクラスはユーザー定義のベクトルによる乗算をサポートしていないため、TypeErrorが作成されます。
新しい乗算関数を書くだけでこの問題を解決できます
def multiply(a, b):
try:
return a * b
except TypeError:
return b * a
ただし、これには、ユーザー定義クラスで使用するすべての関数を再定義する必要があります。
組み込み関数でこれを正しく処理する方法はありますか?