Как интегрировать pow()/** с пользовательским классом в Python?Python

Программы на Python
Anonymous
Как интегрировать pow()/** с пользовательским классом в Python?

Сообщение Anonymous »

Я создал матричный класс на Python просто для практики и хочу добиться чего-то вроде:

Код: Выделить всё

M1=Matrix(elements)
print(M1**3)
Я уже определил метод умножения.
Вот ошибка, которую я получаю, когда пытаюсь это сделать:

Код: Выделить всё

TypeError: unsupported operand type(s) for ** or pow(): 'Matrix' and 'int'
Я знаю, что могу создать метод для достижения этой цели, но есть ли способ использовать '**'?
Вот класс для справки.
(Я знаю, что код может быть неэффективным, это всего лишь практика)

Код: Выделить всё

class Matrix:

'''A list based matrix class'''

def __init__(self,rows):

#rows is a 2-d list ex. [[1,2,3],[4,5,6]]

self.rows=rows
self.columns=self.get_cols()

if not(self.valid()):
raise ValueError("Some incomplete rows are present")

else:
self.order=(len(self.rows),len(self.columns))

def valid(self):
lenght=len(self.rows[0])
for i in self.rows:
if not (len(i) == lenght):
return False
else:
return True

def get_cols(self):
cols=[]
for row in self.rows:
for j in range(len(row)):
try:
cols[j].append(row[j])
except IndexError:
cols.append([row[j]])
return cols

def __mul__(self,other):
if(type(self) is type(other)):
#MATRIX MULTIPLICATION
if(self.order[1] == other.order[0]):
prod=[[] for i in range(self.order[0])]

for row in range(len(self.rows)):
for col in range(len(other.columns)):
sum=0
for i in range(len(self.rows[row])):
sum+=self.rows[row][i]*other.columns[col][i]
prod[row].append(sum)
return Matrix(prod)
else:
raise ValueError("Can't multiply 2 matrices with different inner dimensions")

elif(type(other) is int or type(other) is float):
#scalar multiplication
for i in range(len(self.rows)):
for j in range(len(self.rows[i])):
self.rows[i][j]*=other
return self

else:
raise ValueError(f"Can't multiply with {type(other)}")
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/684 ... -in-python

Вернуться в «Python»