こんなコードを実行する。
class Poly(list):
def __add__(self, a):
res = Poly([])
m = len(self)
n = len(a)
if m < n:
res[0:n] = a[0:n]
for i in range(m):
res[i] += self[i]
else:
res[0:m] = self[0:m]
for i in range(n):
res[i] += a[i]
return resf = Poly([1, 1])
g = Poly([2, 3])
print f + g # [3, 4]
f += g
print f # [1, 1, 2, 3]
Polyはlistを継承している。__add__を定義することで、+演算子をオーバーライドできる。しかし、+=演算子はオーバーライドできず、listの演算子がそのまま使われている。
行列式の計算のとき、何が問題なのかなかなかわからなかった。
色々調べたが、対策は見つけられなかった。
Pythonのヴァージョンは、2.5.1。