python的userlist_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這樣的模塊是非常必要的。
總結
以上是生活随笔為你收集整理的python的userlist_Python中UserDict、UserString、UserList有用吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git ssh配置完后拉取代码_Git中
- 下一篇: php7.0康乐安装_Linux环境PH