要想成功實現容器的定製,需要先明白協議。
協議類似其他程式語言中的介面,規定了哪些方法必須要定義。
關於定製容器的一些協議:
像序列型別(如列表、元組、字串)或者對映型別(字典)都是屬於容器型別
如果希望定製的容器是不可變的話,只需要定義__len__()
和__getitem__()
方法
如果希望定製的容器是可變的話,除了定義__len__()
和__getitem__()
方法還需要定義__setitem__()
和__delitem__()
兩個方法
魔法方法
含義__len__(self)
定義當被len()函式呼叫時的行為(返回容器中元素的個數)
__getitem__(self, item)
定義獲取容器中指定元素的行為,相當於self[key]
__setitem__(self, key, value)
定義設定容器中指定元素的行為,相當於self[key]=value
__delitem__(self, key)
定義刪除容器中指定元素的行為,相當於del self[key]
__iter__(self)
定義當迭代容器中的元素的行為
__reversed__(self)
定義當被reversed()函式呼叫時的行為
__contains__(self, item)
定義當使用成員測試運算子(in或not in)時的行為
示例:
class
countlist
:def
__init__
(self,
*args)
:# 列表推導式
self.values =
[x for x in args]
# self.valus = list(args)
self.count =
.fromkeys(
range
(len
(self.values)),
0)# 使用陣列下標做字典的鍵,注意不能用元素作為字典的鍵
# 因為列表不同的下標可能有值一樣的元素,但字典不能有兩個相同的鍵
Python 定製序列
1 python中的三大容器 列表list,元組tuple,字串string 2 python允許我們定製乙個不可變的容器,如string,中就不能有修改容器的資料方法,如 setitem delitem 3 如果希望定製的容器支援reversed 內建函式,則容器中需定義 reversed 方法,...
學習。。。python定製方法
class chain object def init self,path self.path path def getattr self,path return chain s s self.path,path def call self,path return chain s s self.pa...
學習定義與宣告
定義 與 宣告 c primer 第四版 2.3.5節中這麼說到 1 變數定義 用於為變數分配儲存空間,還可為變數指定初始值。程式中,變數有且僅有乙個定義。2 變數宣告 用於向程式表明變數的型別和名字。3 定義也是宣告 當定義變數時我們宣告了它的型別和名字。4 extern關鍵字 通過使用exter...