关于__getslice__(self, i, j)的说明

Python2中自定义类的切片s[i:j]是通过特殊方法__getslice__来实现的,切片一般有如下几种形式:

s[:j]
s[i:j]
s[i:]
s[:]

与缺省参数不同,在方括号中省略掉i或者j,并不需要在自定义的类中写__getslice__的时候定义缺省参数。

我们作业的基本要求是做出i,j不省略,而且都大于等于0的切片函数即可。

class UnorderedList:
...
    def __getslice__(self, i, j):

    def __len__(self):
        return self.size()
...

在__getslice__函数中,其参数i,j的具体值分为如下几种情况:

  • 如果s[:j],未指定i,那么函数中i== 0
  • 如果s[i:j],都指定了,那么函数中i、j就是指定的值
  • 如果s[i:],未指定j,那么函数中j== sys.maxsize,会是一个很大的整数(要在文件开头import sys)
  • 如果s[:],未指定i、j,那么函数中i==0并且j== sys.maxsize
  • 如果i、j指定为负数,那么函数中i、j的值就是self.__len__()加上这个负数,一般把__len__定义为列表的长度:
    • 如-1,列表的长度是5,那么函数中的参数值就是-1+5=4

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

*