Pythonでいくつかの数学的構造を実装しようとしています。他の多くが継承される基本クラスは、マトリックス クラスです。このクラスには、乗算が実装されています。
def __mul__(self, other):
if isinstance(other,matrix):
if not self._type._ncols == other._type._nrows:
raise ValueError('Cannot multiply matrix of type "{0}" with matrix of type "{1}"'.format(self._type, other._type))
arr=[[sum([val1*val2 for val1,val2 in zip(row,col)]) for col in other.columns()] for row in self._array]
self._type=matrix_type(array=arr)
self._array=arr
return self
else:
arr = [[val*other for val in row] for row in self._array ]
self._type=matrix_type(array=arr)
self._array=arr
return self
これは問題なく動作しますが、行列クラスから継承するクラス ('spinor' という名前) の 2 つのインスタンスを乗算すると、結果は行列クラスのインスタンスであり、派生したスピノル クラスのインスタンスではありません。スピノル クラスには、乗算後に必要な追加機能がいくつかあるため、これは問題です。
戻り値の型が派生クラスの型を反映するような方法で乗算を実装する方法はありますか?
ありがとう!