在Python中钩住添加/移除列表项
我想创建一个可以替代 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)
你可能还需要再做几个这样的操作,才能看到所有的内容。