我正在學習 PyTorch 的Dataset課程。根據我之前的了解,我們需要從torch.utils.data.Dataset每次創建CustomDataset自己的類時繼承;此外,我們需要根據需要覆寫__len__and__getitem__方法。
但是,我知道繼承并不總是必要的,我們可以繼續使用和方法創建我們的CustomDataset類而不繼承自,即使這樣,自定義資料集實體的行為仍然幾乎相同(我自己測驗過) )。__len____getitem__torch.utils.data.Dataset
也就是說, len(cust_data) 將回傳我們在創建cust_data實體時傳遞的資料集的長度,我們甚至可以索引cust_datalikecust_data[0]它會回傳__getitem__我們CustomDataset類中方法回傳的內容。
我的問題是——
當我們在沒有繼承的情況下也一樣好時,繼承的需要是什么——如果我們不是,如果我們不繼承,我們會錯過什么功能?什么時候推薦繼承,什么時候不推薦?(雖然官方檔案建議總是繼承)
不繼承時,實體如何知道它需要在
__getitem__索引時呼叫該方法?
任何答案表示贊賞。
uj5u.com熱心網友回復:
看看源代碼- 它是
torch.utils.data.Dataset一個抽象類,它保證每個繼承它的類都必須實作__getitem__。換句話說,您不需要“繼承”Dataset:只要__getitem__正確實施,您的資料集類就可以正常作業。這樣做已成為普遍做法的原因是它向第三方(例如,使用您的資料集類的一些其他代碼,閱讀您的代碼的其他人)表明該類已__getitem__實作。它為 PyTorch 資料集提供了一個通用介面。執行
someClass[i]會自動someClass.__getitem__帶引數呼叫(如果不實作i會拋出錯誤)。__getitem__這是 Python 的內置功能,與您繼承的基類無關。你可以谷歌“dunder methods”來了解更多關于這些特殊行為的資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/483354.html
