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

时间:2015-01-08 21:53:00

标签: python python-3.x python-2.x

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

def __getslice__(self, index, listget=list.__getslice__):
    self._resolve()
    return listget(self, index)

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

1 个答案:

答案 0 :(得分:5)

您应该能够一起删除__getslice__方法。现在(在python3.x中)__getitem__处理__getslice__除了__getitem__处理的情况之外用来处理的相同情况 - 在python3中,__getslice__

应该永远不要调用自定义类的方法(可能是它的外观的列表子类)

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

def __getitem__(self, index):
    self._resolve()
    return super().__getitem__(index)