Sometimes inside __getitem__() method you may need to convert the “slice” coming as argument to a “range” :
#convert slice to range def slice2range(s): start = 0 if s.start is None else s.start step = 1 if s.step is None else s.step end = step if s.stop is None else s.stop return range(start,end,step) #inside your code it will be something like this : def __getitem__(self, item): if isinstance(item, slice): ....
Example :
: slice2range(slice(2,5)) : range(2, 5) : slice2range(slice(2,5,1)) : range(2, 5) : slice2range(slice(5)) : range(0, 5)