我应该用什么代替 .__getslice__?
What should I use instead of .__getslice__?
我正在将库移植到 Python 3. 我找到了这个方法:
def __getslice__(self, index, listget=list.__getslice__):
self._resolve()
return listget(self, index)
这会引发错误,因为 .__getslice__
已弃用。我查看了文档,似乎 .__getitem__
是大多数人用来替换 .__getslice__
的东西。唯一的问题是这个库有一个与上述方法完全相同的方法,除了它被称为 __getitem__
和 listget=list.__getitem__
)。我不知道他们为什么在代码中做出这种区分,但似乎库的原始设计者想要保留这两种方法的独特功能。在移植到 Python 3 时,我有什么办法可以保持这一点吗?
您应该能够简单地一起删除 __getslice__
方法。现在(在 python3.x 中)__getitem__
除了 __getitem__
处理过的案例之外,还处理 __getslice__
曾经处理过的相同案例——因此,在 python3 中,自定义 class 上的 __getslice__
方法(从外观上看可能是一个列表 subclass)不应该被调用。
另请注意,如果这是一个列表子class,那么您应该使用super
调用超级class:
def __getitem__(self, index):
self._resolve()
return super().__getitem__(index)
我正在将库移植到 Python 3. 我找到了这个方法:
def __getslice__(self, index, listget=list.__getslice__):
self._resolve()
return listget(self, index)
这会引发错误,因为 .__getslice__
已弃用。我查看了文档,似乎 .__getitem__
是大多数人用来替换 .__getslice__
的东西。唯一的问题是这个库有一个与上述方法完全相同的方法,除了它被称为 __getitem__
和 listget=list.__getitem__
)。我不知道他们为什么在代码中做出这种区分,但似乎库的原始设计者想要保留这两种方法的独特功能。在移植到 Python 3 时,我有什么办法可以保持这一点吗?
您应该能够简单地一起删除 __getslice__
方法。现在(在 python3.x 中)__getitem__
除了 __getitem__
处理过的案例之外,还处理 __getslice__
曾经处理过的相同案例——因此,在 python3 中,自定义 class 上的 __getslice__
方法(从外观上看可能是一个列表 subclass)不应该被调用。
另请注意,如果这是一个列表子class,那么您应该使用super
调用超级class:
def __getitem__(self, index):
self._resolve()
return super().__getitem__(index)