我正在编写一个稀疏矩阵库(为什么是另一个故事...)
到目前为止,我的基类具有+,-,*等的运算符重载...
最少的代码如下:
class SpMat:
"""
Matrix in compressed-column or triplet form.
"""
def __init__(self, m=0, n=0):
"""
@param m: number of rows
@param n: number of columns
"""
# number of rows
self.m = m
# number of columns
self.n = n
self.data = [[0 for x in range(self.n)] for y in range(self.m)]
def [i, j]: # this is what I want to implement
if isinstance(i, int) and isinstance(j, int):
return self.data[i][j]
elif isinstance(i, int) and j = :
return "the row i" # will implement it
elif isinstance(j, int) and i = :
return "the column j" # will implement it
因此,在示例代码中,我想实现类似def [i, j]
的方式来获取和设置值,但是我不知道如何告诉python在我写myobject[a, b]
时要在以下位置获取值坐标a,b,当我写myobject[a, b]= some_value
时,我想在坐标a,b处设置值。
答案 0 :(得分:1)
您可以覆盖类的__getitem__
方法。
class SpMat:
"""
Matrix in compressed-column or triplet form.
"""
def __init__(self, m=0, n=0):
"""
@param m: number of rows
@param n: number of columns
"""
# number of rows
self.m = m
# number of columns
self.n = n
self.data = [[0 for x in range(self.n)] for y in range(self.m)]
def __getitem__(self, key):
# i and j are integers and you don't need to check the type
i = key.start
j = key.stop
if isinstance(i, int) and isinstance(j, int):
return self.data[i][j]
elif isinstance(i, int) and j = :
return "the row i" # will implement it
elif isinstance(j, int) and i = :
return "the column j" # will implement it
如果使用以下语法调用实例,则key
参数将是slice
对象:instance[1:10]
。但是,如果您以如下方式调用实例:instance[1]
,则键值将是一个整数,其值等于1。
在前一种情况下,您可以通过调用key.start
获得第一个参数(在该示例中:1),并在第二个示例中通过调用key.stop
获得第二个参数(在该示例中:10)。
因此,最好在方法开始时检查key
参数的类型。