在python中,如何为自己的矩阵类创建两个索引切片?

在python中,如何为自己的矩阵类创建两个索引切片?,python,matrix,slice,magic-methods,Python,Matrix,Slice,Magic Methods,我正试图用python编写自己的矩阵类,只是为了测试。实际上,这个矩阵类是C++的,我用SWIG来实现这两个接口。但是,对于这个问题,考虑这个矩阵类的纯Python实现可能比较简单。p> 我希望能够调用这个矩阵类并使用两个索引切片。例如,在我们创建一个4x4矩阵之后 >>> A = Matrix(4,4,1) 我希望能够得到子2x2矩阵: >>>> A[1:2,1:2] 我听说过\uuu getslice\uuu方法,但它似乎只允许单个切片,例如A[

我正试图用python编写自己的矩阵类,只是为了测试。实际上,这个矩阵类是C++的,我用SWIG来实现这两个接口。但是,对于这个问题,考虑这个矩阵类的纯Python实现可能比较简单。p> 我希望能够调用这个矩阵类并使用两个索引切片。例如,在我们创建一个4x4矩阵之后

>>> A = Matrix(4,4,1)
我希望能够得到子2x2矩阵:

>>>> A[1:2,1:2]
我听说过
\uuu getslice\uuu
方法,但它似乎只允许单个切片,例如
A[1:2]
。那么,如何执行双索引切片,以便调用
a[I:j,l:k]


谢谢

请注意,
\uuuu getslice\uuuu
自2.0版以来已被弃用

考虑下面的最小例子:

class Foo:
    def __getitem__(self, *args):
        print args
f = Foo()
f[1:2,2:4]
这将打印:

((slice(1, 2, None), slice(2, 4, None)),)
如果查看,您将看到
slice
对象是:

…用于在使用扩展切片语法时表示切片。 特殊只读属性:
start
为下限<代码>停止是 上限<代码>步长为步长值;如果省略,每个都是
None
。这些 属性可以有任何类型


在这里,应该非常清楚如何实现2索引片处理。

我明白了。所以你要传递一个切片对象的元组。酷,谢谢!现在,您知道如何通过python-capi传递切片对象的元组了吗?不抱歉,尽管我不明白为什么它与其他方法不同。这只是标准的arg带片传球?