Мой код выглядит как программа, которая решает различные задачи, связанные с матрицами. Это фрагмент моего кода, который содержит всю необходимую информацию об ошибке, которую я получаю. В моем коде определения класса Matrix (rowswap, rowmult и rowscalaradd) не наследуются надлежащим образом дочернему классу "SquareMatrix" и выдают ошибку "Не удается найти ссылку 'rowswap' в 'function'". Я пробовал другой синтаксис безуспешно, что я делаю не так?
edit: ошибка появляется в строках 56,59,62 этого кода со следующим:
Невозможно найти ссылку 'rowswap (затем впоследствии rowmult и rowscalaradd соответственно в строках 59 и 62)' в 'функции'
Информация о проверке: эта проверка обнаруживает имена, которые должны разрешаться, но не разрешаются. Из-за динамического распределения и типизации утки это возможно в ограниченном, но полезном количестве случаев. Элементы верхнего уровня и класса поддерживаются лучше, чем элементы экземпляра.
class Matrix:
def __init__(self, data):
self.data = data
def __repr__(self):
outstr = ""
for i in range(len(self.data)):
outstr += 'Row %s = %s\n' % (i + 1, self.data[i])
return outstr
def rowswap(self, choice1, choice2):
data = self.data
row1 = self.data[choice1]
row2 = self.data[choice2]
data[choice1] = row2
data[choice2] = row1
return Matrix(data)
def rowmult(self, scalar, rownumber):
data = self.data
for k in range(len(self.data[0])):
data[rownumber][k] = (data[rownumber][k] * scalar)
return Matrix(data)
def rowscalaradd(self, modified, modifier, scalar):
data = self.data
for p in range(len(self.data[0])):
data[modified][p] = data[modified][p] + scalar * data[modifier][p]
return Matrix(data)
class SquareMatrix(Matrix):
def __init__(self, data):
super().__init__(data)
if len(self.data) != len(self.data[0]):
raise ValueError('Not a square matrix')
def identity(self):
identity = self.data
for i in range(len(self.data)):
for j in range(len(self.data[0])):
if i == j:
identity[i][j] = 1
else:
identity[i][j] = 0
return Matrix(identity)
def inverse(self):
data = self.data
id = self.identity
iters = 0
while iters < len(data):
for j in range(0, len(self.data[0])):
while self.data[iters][j] == 0:
self.rowswap(iters, iters + 1)
id.rowswap(iters, iters + 1)
else:
self.rowmult(1 / data[iters][j], iters)
id.rowmult(1 / data[iters][j], iters)
for i in range(iters + 1, len(data)):
self.rowscalaradd(i, iters, -1 * data[i][j])
id.rowscalaradd(i, iters, -1 * data[i][j])
iters = iters + 1