Есть ли способ определить оператор [] для экземпляра класса? - PullRequest
2 голосов
/ 22 октября 2011

Я хочу определить класс для представления матрицы

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 Ответ

7 голосов
/ 22 октября 2011

оператор [] звонит __getitem__:

class A:
    def __getitem__(self, index):
        return index+1

a = A()
print(a[1]) # prints 2

Вы можете реализовать [] [], возвращая прокси-объект, который представляет строку и также отвечает на __getitem__. Или вы можете принять кортеж в качестве индекса и использовать синтаксис A[i,j].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...