#python #object #operators
#python #объект #операторы
Вопрос:
Я хочу определить класс для представления матрицы
class matrix:
def __init__(self, mat):
self.mat = mat
self.dim = len(mat)
@classmethod
def withDim(matrix, dimension):
mat = [ [0]*dimension for i in range(dimension)]
return matrix(mat)
где mat
находится список списков, чтобы представить матрицу
A = | a b |
| c d |
Я могу написать следующее
A = matrix( [ [a, b], [c, d] ])
Я также начал определять некоторые операторы, такие как
def __add__(self, other):
n = self.dim
result = self.withDim(n)
for i in range(n):
for j in range(n):
result.mat[i][j] = self.mat[i][j] other.mat[i][j]
return result
Теперь, если я хочу получить доступ к элементу i, j
в матрице A
, я должен сделать
A.mat[i][j]
Вопрос в том, могу ли я определить оператор [ ]
для выполнения
A[i][j]
точно так же, как я определил __add__
?
Комментарии:
1.
__add__
Там этогоself.withDim
не должно бытьmatrix.withDim
.2. оператор [] для класса? Вы бы лучше назвали это operator для экземпляра, так как есть также способ сделать matrix[i][j] , где matrix — это сам класс, а не экземпляр matrix class .
3. @warvariuc просто изменил заголовок, спасибо
Ответ №1:
оператор [] вызывает __getitem__
:
class A:
def __getitem__(self, index):
return index 1
a = A()
print(a[1]) # prints 2
Вы можете реализовать [][] , вернув прокси-объект, который представляет строку, а также отвечает на __getitem__
. Или вы можете принять кортеж в качестве индекса и использовать A[i,j]
синтаксис.