魔法方法:__getitem__()和__len__()
1.魔法函數簡介:
在Python中,如果想實現創建類似於序列和映射的類(可以迭代以及通過[下標]返回元素),可以通過重寫魔法方法的方式去實現。常見的魔法方法包括__getitem__()、__setitem__()、__delitem__()、__len__(),它們的函數功能爲:
1)__getitem__(self,key):
返回鍵對應的值;
2)__len__():
返回元素的數量;
3)__delitem__(self,key):
刪除給定鍵對應的元素;
4)__setitem__(self,key,value):
設置給定鍵的值。
其中只要實現了__getitem__
和 __len__
方法就會被認爲是序列。
__len__()
函數可以用來查看對象長度;
__getitem__(self,key)函數
可以對對象進行[]操作如切片、索引、iterd等,如果在類中定義了__getitem__()
方法,那麼它的實例對象(假設爲P)就可以以P[key]形式取值,當實例對象做P[key]運算時,就會調用類中的__getitem__()
方法。當對類的屬性進行下標的操作時,首先會被__getitem__()、__setitem__()、__delitem__()
攔截,從而執行我們在方法中設定的操作,如賦值,修改內容,刪除內容等。
2.Dataset類中的__getitem__
和 __len__
方法:
torch.utils.data.Dataset
是PyTorch中用來表示數據集的抽象類,Dataset是一個包裝類,用來將數據包裝爲Dataset類,然後傳入DataLoader中從而使DataLoader類更加快捷的對數據進行操作。當處理自定義的數據集的時候必須繼承Dataset
,然後重寫 __len__()和
__getitem__()
函數。
1)__len__()
: 使得len(dataset)
返回數據集的大小;
2)__getitem__()
:使得支持dataset[i]
能夠返回第i個數據樣本這樣的下標操作,在__getitem__()
函數中完成圖片的讀取工作可以減小內存開銷,只要在需要用到的時候纔將圖片讀入。
3.參考博客:
1)https://www.jianshu.com/p/cca8e8834066