2011-10-22 62 views
2

我想定義類來表示一個矩陣有沒有辦法爲一個類的實例定義[]運算符?

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 

現在,如果我想在矩陣A我要做

A.mat[i][j] 

訪問元素i, j的問題是:我可以爲了做

A[i][j] 

就像我定義操作[ ]定義__add__

+0

在'__add__'裏它應該是'self.withDim'而不是'matrix.withDim'。 – agf

+0

[]運營商爲一類?你最好稱它爲一個實例的operator,因爲還有一種方法可以做matrix [i] [j],其中matrix是類本身,而不是matrix類的一個實例。 – warvariuc

+0

@agf謝謝! –

回答

7

operator []的調用__getitem__

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

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

您可以實現[] []通過返回表示該行的代理對象,也是爲了響應__getitem__。或者,您可以接受元組作爲索引並使用A[i,j]語法。

相關問題