Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有办法为类的实例定义[]运算符?_Python_Object_Operators - Fatal编程技术网

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刚刚修改了标题,谢谢