2011-04-29 76 views
4

我想創建一個嵌入替代python的list,這將允許我知道何時添加或刪除項目。列表的子類或者實現列表接口的東西同樣適用。我更喜歡一個解決方案,我不必重新實現列表的所有功能。有沒有一種簡單的+ pythonic方式來做到這一點?掛鉤添加/刪除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

我認爲你需要重寫'append','extend'和(有點棘手)'__setitem__'。 – 2011-04-29 23:22:03

+0

而不是重寫'list'(這是正確的事情,但有點棘手),你可以在只實現你需要的API的列表上寫一個小包裝器。 – 2011-04-29 23:26:44

回答

2

documentation for userlist告訴你繼承list,如果你不要求你的代碼的Python < 2.2工作。至少可以重寫至少允許添加/刪除元素的方法。請注意,這包括切片操作員。

5

要查看列表定義了什麼功能,你可以做

>>> dir(list) 

然後你會看到你可以覆蓋的,可以嘗試比如這個:

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

你可能需要做一個他們幾乎沒有得到它。

+0

'__iadd__'就是這樣。我用'__setitem__'嘗試過,並想知道爲什麼控件沒有通過它。 – 2011-04-29 23:34:05