在Python中钩住添加/移除列表项

4 投票
2 回答
892 浏览
提问于 2025-04-16 16:41

我想创建一个可以替代 Python 中的 list 的东西,这样我就能知道什么时候有东西被添加或移除了。可以是 list 的子类,或者实现了 list 接口的其他东西都可以。不过,我希望能有一种方法,不用重新实现 list 的所有功能。有没有简单又符合 Python 风格的方法呢?

伪代码:

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 个回答

2

关于 userlist 的说明 里提到,如果你不需要让你的代码在 Python 2.2 之前的版本上运行,那么可以直接继承 list 这个类。你可能需要重写一些方法,特别是那些用来添加或删除元素的方法。要注意,这些方法还包括切片操作符。

5

要查看列表中定义了哪些函数,你可以这样做:

>>> dir(list)

然后你就能看到哪些函数可以被你重新定义,比如你可以试试这个:

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

你可能还需要再做几个这样的操作,才能看到所有的内容。

撰写回答