看到这个注释:
object.__getslice__(self, i, j)
从2.0版开始不推荐使用:支持将切片对象用作__getitem__()
方法的参数 。(但是,cpython中的内置类型当前仍在实现__getslice__()
。
因此,因为您list
已经继承了子类__getslice__
,所以即使它已弃用,也必须覆盖它。
我认为您通常应该避免对内建函数进行子类化,因为有太多奇怪的细节。如果您只想要一个行为类似于列表的类,则可以使用ABC来帮助您:
from collections import Sequence
class 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 methods
print s[1:2], len(s), bool(s), s.count(3), s.index(2), iter(s)