有没有办法为类的实例定义[]运算符?

时间:2011-10-22 09:18:04

标签: python object operators

我想定义类来表示矩阵

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 个答案:

答案 0 :(得分:7)

operator []调用__getitem__

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

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

您可以通过返回代表该行的代理对象来实现[] [],并响应__getitem__。或者,您可以接受元组作为索引并使用A[i,j]语法。