在字典和列表中我們經常使用[]來獲取字典中的值或者列表中的元素,是因為字典和列表都內置了__getitem方法。
"__getitem__" in (dir(list)) >>>True "__getitem__" in (dir(dict)) >>>True
我們自定義一個類,當實例對象通過[]運算符取值時,會自動調用它的__getitem__方法
class DataBase: def __init__(self,id,address): #初始化方法 self.id=id self.address=address self.d={self.id:1,self.address:"192.168.1.1"} def __getitem__(self,key): return self.d.get(key,"default") data=DataBase(1,"192.168.1.1") print(data['hi']) >>>"default" #data.d中無 “hi”鍵, 返回 “default” print(data[data.id]) >>>1 print(data[data.address]) >>>"192.168.1.1"
序列可以迭代,即 for i in P
內置方法__getitem__(self, index)同樣可以實現對象迭代(從索引0開始)。
class DataBase: def __init__(self,id,address): #初始化方法 self.id=id self.address=address self.d={self.id:1,self.address:"192.168.1.1"} def __getitem__(self,key): assert key < 10 print(key) #打印索引值 return self.d.get(key,"default") #返回字典value,默認為default data=DataBase(1,"192.168.1.1") for i in data: print(i) >>>0 default 1 1 # 字典中含有key1, 輸出value1 2 default 3 default 4 default 5 default 6 default 7 default 8 default 9 default
實現__iter__和__next__同樣的效果
i_data = iter(data) next(i_data) >>>0 default