我该怎么用而不是.__ getslice__?

Bar*_*Bar 2 python python-2.x python-3.x

我正在将一个库移植到Python 3.我找到了这个方法:

def __getslice__(self, index, listget=list.__getslice__):
    self._resolve()
    return listget(self, index)
Run Code Online (Sandbox Code Playgroud)

.__getslice__弃用而引发错误.我查看了文档,似乎.__getitem__是大多数人用来替换的东西.__getslice__.唯一的问题是这个库有一个与上面方法完全相同的方法,除了它被称为__getitem__listget=list.__getitem__).我不知道他们为什么在代码中做出这种区分,但似乎图书馆的原始设计者想要保留两种方法的独特功能.移植到Python 3时有什么方法可以保留这个吗?

mgi*_*son 6

您应该能够一起删除__getslice__所有方法.现在(在python3.x中)__getitem__处理__getslice__除了__getitem__处理的情况之外用于处理的相同情况- 在python3中,__getslice__自定义类上的方法(可能是它的外观的列表子类)永远不应该被调用.

另请注意,如果这是一个列表子类,那么您应该使用它super来调用超类:

def __getitem__(self, index):
    self._resolve()
    return super().__getitem__(index)
Run Code Online (Sandbox Code Playgroud)