Python 有没有办法为类的实例定义[]运算符?
我想定义一个表示矩阵的类Python 有没有办法为类的实例定义[]运算符?,python,object,operators,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) 其中ma
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
中的元素I,j
,我必须这样做
A.mat[i][j]
问题是:我是否可以定义运算符[]
,以便执行以下操作
A[i][j]
就像我定义的
\uuuuu添加\uuuuu
?操作符[]调用\uuuuu getitem\uuuu
:
class A:
def __getitem__(self, index):
return index+1
a = A()
print(a[1]) # prints 2
您可以通过返回一个代理对象来实现[],该代理对象表示行并响应
\uuu getitem\uuu
。或者,您可以接受元组作为索引,并使用A[i,j]
语法。在\uuu\uuu
中,它应该是self。withDim
不是矩阵。withDim
[]操作符用于类?您最好将其称为实例运算符,因为还有一种方法可以执行矩阵[i][j],其中矩阵是类本身,而不是矩阵类的实例。@warvariuc刚刚修改了标题,谢谢