我正在尝试在 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 类具有一些我在乘法后需要的附加功能。
有没有办法实现乘法,返回类型反映派生类的类型?
谢谢!