gpt4 book ai didi

python - 在子类化 collections.MutableSequence 时如何实现 __delitem__?

转载 作者:太空狗 更新时间:2023-10-30 02:49:57 24 4
gpt4 key购买 nike

根据 Alex Martelli 的指导使用 collections.MutableSequence 而不是子类化 list()(使用 Python 2.6.6)

亚历克斯建议使用

class HostList(collections.MutableSequence):
"""A container for manipulating lists of hosts"""
def __init__(self):
"""Initialize the class"""
self.list = list()

必须实现__delitem__,否则 MutableSequence 会变得胡思乱想...

>>> import HostList as H
>>> foo = H.HostList()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class HostList with abstract methods __delitem__
>>>

我还尝试使用 return del(ii)return self.list.remove(ii) 构建 __delitem__...但这些都没有用。在此上下文中声明 __delitem__ 的正确方法是什么?

编辑:最终决议是这样做的

    def __delitem__(self, ii):
"""Delete an item"""
del self.list[ii] # Thank you @Thomas for the pointer about .remove()
return

最佳答案

del ii , del(ii) : 您正在删除名称 ii从功能范围__delitem__ ,而不是列表(参见: del )

如果ii是列表中的一项,您可以使用:self.list.remove(ii);

如果 ii 是列表中某项的索引,则可以使用:self.list.remove(self.list[ii])

更新

或者正如@Thomas Wouters所说,最好使用del self.list[ii]

关于python - 在子类化 collections.MutableSequence 时如何实现 __delitem__?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5593475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com