python 魔法方法 __getitem__


在字典和列表中我們經常使用[]來獲取字典中的值或者列表中的元素,是因為字典和列表都內置了__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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM