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

时间:2011-04-08 10:01:12

标签: python

使用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

1 个答案:

答案 0 :(得分:5)

del iidel(ii):您要从函数ii的范围中删除名称__delitem__,而不是列表(请参阅:del)< / p>

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

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

更新

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