Python中UserDict、UserString、UserList有用嗎?
一個繼承Python內建結構的坑兒。從Python 2.2開始,Python支援繼承Python內建結構,如list、dict。為了簡化專案內容,直接繼承了dict,但是結果和預期不一樣。現在來好好研究研究:
舉個例子:
In : class NewDict(dict): ...: def __getitem__(self, key): ...: return 42 ...: In : d = NewDict(a=1) In : d Out: {'a': 42} In : d2 = {} In : d2.update(d) In : d2 Out: {'a': 1}
也就是說NewDict的__getitem__方法被dict.update給忽略了。
In : from UserDict import UserDict In : class NewDict(UserDict): ...: def __getitem__(self, key): ...: return 42 ...: In : d = NewDict(a=1) In : d['b'] =2 In : d Out: {'a': 1, 'b': 2} In : d['b'] Out: 42 In : d2 = {} In : d2.update(d) In : d2 Out: {'a': 42, 'b': 42}
這才是對的呀。
後來在PyPy的文件中發現了原因,也就是這種C實現的結構的內建方法大部分會忽略過載的那個方法。
之前以為UserDict這樣的類是歷史遺留問題,現在才知道是有原因的。原來UserDict、UserString、UserList這樣的模組是非常必要的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756/viewspace-2837505/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 學python對金融有用嗎Python
- 普通上班族學Python有用嗎?Python
- 學python入門有用嗎?Python全棧開發Python全棧
- 普通人學Python能幹什麼?有用嗎?Python
- 普通人學Python有用嗎?就業前景如何?Python就業
- IT培訓報班有用嗎?
- 考Java認證有用嗎?Java
- 求助有用 upupw 搭建 Laravel 的嗎?Laravel
- CRM管理系統真的有用嗎?
- 你有用過 Github 的 Gist 嗎?Github
- 有用過java web start的嗎?JavaWeb
- Python有用的模組Python
- 有用 AT 命令測試過晶片的嗎?晶片
- 《深入理解JavaScript》——2.3 JavaScript有用嗎JavaScript
- 主鍵列直方圖有用嗎?直方圖
- 有用mssql2k成功的嗎SQL
- laravel octane有用於生產的大佬嗎?Laravel
- 有用java web start做架構的嗎?JavaWeb架構
- 那些有趣/有用的 Python 庫Python
- 有用過grpc的嗎?Couldn't find descriptorRPC
- 快手小程式的分銷功能有用嗎?
- 一些有用的Python庫Python
- adobe國際認證證書有用嗎?
- Python中的字典遍歷有序嗎?Python
- python中不區分大小寫嗎Python
- 工作中那些有用的工具
- 10個超級有用的Python工具!Python
- 五個最有用的Python技巧 - dannysteenmanPython
- 參加java培訓真的能學到有用的嗎Java
- Laravel Filament 後臺皮膚,有用的人嗎?一起?Laravel
- 網站蜘蛛日誌如何分析?對優化有用嗎?網站優化
- 資料字典真的有用嗎?--開源軟體誕生12
- 雲端計算發展飛速,虛擬主機還有用嗎?
- 公司還沒有推行六西格瑪,黑帶證書有用嗎?
- 蘋果手錶有用嗎? 解讀如今智慧穿戴裝置亂象蘋果
- 有用過velocity的嗎? 有個問題,進來看看吧
- 10個對Web開發者最有用的Python包WebPython
- python就是爬蟲嗎-python就是爬蟲嗎Python爬蟲