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时有什么方法可以保留这个吗?
您应该能够一起删除__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)