挂钩在python中添加/删除列表中的项目

时间:2011-04-29 23:15:40

标签: python list

我想为python的list创建一个替代品,这样我就可以知道添加或删除项目的时间。列表的子类或实现列表接口的东西也同样适用。我更喜欢一个解决方案,我不必重新实现列表的所有功能。有一种简单的+ pythonic方式吗?

伪代码:

class MyList(list):
    # ...
    def on_add(self, items):
        print "Added:"
        for i in items:
            print i

    # and the same for on_remove

l = MyList()
l += [1,2,3]
# etc.

2 个答案:

答案 0 :(得分:5)

要查看列表中定义的功能,可以执行

>>> dir(list)

然后你会看到你可以覆盖的东西,试试这个:

class MyList(list):
    def __iadd__(self, *arg, **kwargs):
        print "Adding"
        return list.__iadd__(self, *arg, **kwargs)

你可能需要做更多的事情来获得所有这些。

答案 1 :(得分:2)

如果您不要求您的代码使用Python< 2.2,documentation for userlist会告诉您子类list。您可能无法至少覆盖允许添加/删除元素的方法。请注意,这包括切片操作符。