pytorch 中的Dataset這個類為什麼可以調用__getitem__?
我覺得題主你想問的應該是為什麼__getitem()__具有這種特殊的作用,那題主應該要知道這種前後帶雙下斜杠"__"的方法是類的專有方法,與一般的方法不同,我這裡引用python官方文檔的解釋:
3.3. 特殊方法名稱
一個類可以通過定義具有特殊名稱的方法來實現由特殊語法所引發的特定操作 (例如算術運算或下標與切片)。這是 Python 實現 操作符重載 的方式,允許每個類自行定義基於操作符的特定行為。例如,如果一個類定義了名為
__getitem__()
的方法,並且x
為該類的一個實例,則x[i]
基本就等同於x.__getitem__(x,
i)
。除此之外還有__len_()專有方法,則len(x)就等同於x.__len__(x);
__add__()專有方法,則x+other就等同於x.__add__(x,other)
還有很多其他專有方法:詳情請參考:
https://docs.python.org/zh-cn/3.7/reference/datamodel.html#special-method-names
在DataLoder的iter中,會觸發子類Dataset中的getiterm函數讀取數據,並拼接成一個batch返回,作為模型真正的輸入
遇到了不錯的解釋,不可能這個對象繼承了object父類裡面的__getitem__,可能是在編譯階段類似於alias的過程: