В экземпляре класса, можете ли вы использовать значение, возвращаемое одним методом, в качестве параметра для вызова другого метода

#python #python-3.x #class #oop #instance

#python #python-3.x #класс #ооп #экземпляр

Вопрос:

 class A:
   def __init__(self, matrix=[]):
       self.matrix = matrix

   def dimension(self):
       return len(self.matrix), len(self.matrix[0])

   def reduce_matrix(self, i, j):
       temp = self.matrix[:i-1]   self.matrix[i:]
       M = A([row[:j-1]   row[j:] for row in temp])
       return M

   def determinant(self):
       (nrows, ncols) = self.dimension()
       if nrows != ncols:
           return ("Cannot find determinant of non-square matrix.")
       elif nrows == 1:
           return self.matrix[0][0]
       else:
           M = A(sum([ ((-1)**j) * self.matrix[0][j] * self.reduce_matrix(1, 
                   j 1).determinant() for j in range(ncols) ]))
           return M
  

Здравствуйте, я только что запустил ООП, поэтому у меня есть вопрос относительно использования возвращаемого значения метода вместо «имени экземпляра», которое передается как «self» для какого-либо другого метода.

Я включил остальную часть кода, который просто выполняет вычисления для матричных задач, но я фокусируюсь только на «self.reduce_matrix(1, j 1)).determinant()» его части. Мне нужно взять матрицу (которая представляет собой список списков, например. [[1,2,3],[4,5,6]] ), и выполните метод «reduce_matrix» 1 раз для каждого столбца в матрице, и каждый раз метод «determinant(self)» передает значение, возвращаемое другим методом. Когда я запускаю его, он говорит, что «объект списка не имеет атрибута «determinant»», потому что я не могу передать «self» методу determinant, как я обычно делаю -> «self.determinant(self)»

Любые предложения будут высоко оценены

Комментарии:

1. Я действительно смущен этим вопросом. Вы отредактировали код в нем, чтобы устранить ошибку? На этом сайте вопросы должны работать не так. Во что бы то ни стало исправьте код в вашей собственной системе, но не меняйте вопрос, чтобы избавиться от ошибки, по поводу которой вы просили о помощи!

2. Извините, я просто подправил часть кода, с которой у меня не было проблем, потому что человек, который ответил ниже, указал, что я написал одну часть неправильно, поэтому я подумал, что людям будет понятнее, если я исправлю это.

Ответ №1:

В reduce_matrix :

  • создать M как M = A([row[:j-1] row[j:] for row in temp])
  • возвращать не M.matrix , а M само себя.

Тем не менее, numpy существует для всех видов матричных операций и многого другого.

Комментарии:

1. Большое вам спасибо, я даже не знал о библиотеках, пока вы просто не упомянули одну, и я посмотрел ее, что значительно упростило задачу.