如何在列表[1:10]中覆盖[]运算符?

时间:2013-07-15 11:02:03

标签: python list

如何实现自定义列表,以便覆盖list[a:b]的实现?

提前致谢!

2 个答案:

答案 0 :(得分:5)

实施__getitem__ hook;如果是切片,则传入slice object

一个简单的版本可能是:

def __getitem__(self, index):
    if isinstance(index, slice):
        return [self[i] for i in range(*slice.indices(len(self)))]
    return self._internal_sequence[index]

请注意,对于切片分配和切片删除,您还必须实现__setitem____delitem__挂钩。

覆盖现有容器类型时,您还必须处理__getslice__ method;它已弃用,但Python 2类型仍然实现它。同样,对于切片分配和删除,还有相应的__setslice____delslice__挂钩。

答案 1 :(得分:0)

定义__*item__()方法以自定义索引。