看到这个注释:
object.__getslice__(self, i, j)从2.0版开始不推荐使用:支持将切片对象用作
__getitem__()方法的参数
。(但是,CPython中的内置类型当前仍在实现__getslice__()。 因此,在实现切片时,必须在派生类中重写它。
因此,因为您
list已经继承了子类
__getslice__,所以即使它已弃用,也必须覆盖它。
我认为您通常应该避免对内建函数进行子类化,因为有太多奇怪的细节。如果您只想要一个行为类似于列表的类,则可以使用ABC来帮助您:
from collections import Sequenceclass MyList(Sequence): def __init__(self, *items): self.data = list(items) def __len__(self): return len(self.data) def __getitem__(self, slice): return self.data[slice]s = MyList(1,2,3)# lots of free methodsprint s[1:2], len(s), bool(s), s.count(3), s.index(2), iter(s)



