2011-01-20 156 views
2

我有一個dict的自定義實現,它覆蓋並且由本地Python字典支持。但是,在設置時,它會對該值執行一些預處理,並將其存儲在某個專有對象中。獲取時,這個專有對象然後轉換爲更自然的格式。Python字典更新自定義字典

從此自定義字典中調用時的所有功能的行爲都符合我的喜好。

問題是,當您調用類似{'a':1} .update(custom_dict({'b':2}))'時,更新後的字典中'b'的值是專有內部存儲對象,而不是處理的值。

Python的本地字典更新如何工作。我已經覆蓋了我所能想到的所有方法,itemsiteritemsvaluesitervalues,get__getitem__,但我似乎沒有找到更新嘗試訪問的任何更新,這讓我相信它可能會使用c代碼。思考?

--Update--

我剛剛發現這個在Python源代碼:

if (PyDict_Check(b)) { 
    ... 
} 
else { 
    /* Do it the generic, slower way */ 
    ... 
} 

也許這是一個錯誤,這應該是PyDict_CheckExact(b)如在各種其他地方顯示出來碼。

任何想法如何擊敗此檢查?

+0

你是否繼承`dict`?也許不這樣做會有所幫助。看起來你不會重複使用`dict`的大部分功能。 – 9000 2011-01-20 20:46:22

回答