1)python中的三大容器:列表list,元組tuple,字串string;
2)python允許我們定製乙個不可變的容器,如string,**中就不能有修改容器的資料方法,如__setitem__(), __delitem__();
3)如果希望定製的容器支援reversed()內建函式,則容器中需定義__reversed__()方法,提供對內建函式reversed()的支援;
4)容器中,查詢容器『容量『的方法是通過len()內建函式來實現,所以容器應定義__len__()方法;
5)容器支援讀,寫,刪除,對應的方法分別為:__getitem__(), __setitem__(), __delitem__();
6)課上的例項:定製乙個列表,統計列表中每個元素被訪問的次數:
class countlist:
def __init__(self,*args):
self.values=[x for x in args]
self.count={}.fromkeys(range(len(self.values)),0)
def __len__(self):
return len(self.values)
def __getitem__(self,key):
self.count[key] +=1
return self.values[key]
values中儲存了列表的資訊;count是使用字典的形式記錄getitem被呼叫的次數,初始化為0;每呼叫一次就把對應的count【key】值加1;
測試結果:
Python學習 定製序列
要想成功實現容器的定製,需要先明白協議。協議類似其他程式語言中的介面,規定了哪些方法必須要定義。關於定製容器的一些協議 像序列型別 如列表 元組 字串 或者對映型別 字典 都是屬於容器型別 如果希望定製的容器是不可變的話,只需要定義 len 和 getitem 方法 如果希望定製的容器是可變的話,除...
python定製 python中定製類
1 python中 str 和repr 如果要把乙個類的例項變成 str,就需要實現特殊方法 str classperson object def init self,name,gender self.name name self.gender genderdef str self return p...
定製json序列化
最近有人問我怎麼定製乙個json序列化,使序列化的時候只寫出宣告的父類成員,而不要把實際子類的成員寫出來。當然,序列化用的是大家用的最多的json.net。簡單的說,這是個契約怎麼解析的問題,json.net選擇使用實際型別自然是有多方面的考量,畢竟申明型別可以是抽象類或介面等。廢話不說了,直接上 ...