使用Alex Martelli的指导使用collections.MutableSequence而不是子类化list()(使用Python 2.6.6)
Alex建议使用
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__
>>>
我还尝试使用__delitem__
和return del(ii)
构建return self.list.remove(ii)
...但这些都没有效果。在此上下文中声明__delitem__
的正确方法是什么?
编辑:最终解决方案正在执行此操作
def __delitem__(self, ii):
"""Delete an item"""
del self.list[ii] # Thank you @Thomas for the pointer about .remove()
return
答案 0 :(得分:5)
del ii
,del(ii)
:您要从函数ii
的范围中删除名称__delitem__
,而不是列表(请参阅:del
)< / p>
如果ii
是列表中的项目,您可以使用:self.list.remove(ii);
如果ii是列表中项目的索引,您可以使用:self.list.remove(self.list[ii])
或者 @Thomas Wouters 说,最好使用del self.list[ii]