Question
pytorch 中定義的神經網路類的 __init__()
中,經常定義 super(類名, self).__init__()
, 解釋下這句話。比如:
class TestNN(nn.Module):
# 初始化函式
def __init__(self, parm1, ...):
super(TestNN, self).__init__()
pass
Answer
這其實是 python 中的魔術方法。
__init__()
方法在 Python 中通常被稱為“初始化方法”或“構造器”,但它並不是嚴格意義上的建構函式。在 Python 中,建構函式實際上是 __new__()
方法,而 __init__()
方法是在物件建立後進行初始化的方法。
讓我們重新聚焦在選定的程式碼上:
super(類名, self).__init__()
詳細解釋
-
super(類名, self)
:super()
是一個內建函式,用於呼叫父類的方法。類名
是當前類的名稱。self
是當前類的例項。super(類名, self)
返回一個臨時物件,該物件允許呼叫類名
類的父類的方法。
-
__init__()
:__init__()
是類的初始化方法,用於在物件建立後進行初始化。- 透過呼叫
super(類名, self).__init__()
,實際上是在呼叫類名
類的父類的初始化方法。
主要功能
這段程式碼的主要功能是呼叫 類名
類的父類 nn.Module
的初始化方法,以確保 nn.Module
的初始化邏輯得以執行。這樣做的好處是,類名
類能夠繼承 nn.Module
的所有屬性和方法,從而成為一個有效的 PyTorch 神經網路模組。
透過這種方式,類名
類可以在不重複編寫 nn.Module
的初始化程式碼的情況下,利用 nn.Module
提供的功能,如引數管理、前向傳播等。
總結
雖然 __init__()
不是嚴格意義上的建構函式,但在 Python 中,它通常被稱為構造器,因為它在物件建立後立即執行,用於初始化物件的狀態。這段程式碼的主要功能是確保 類名
類的父類 nn.Module
的初始化邏輯得以執行,從而繼承其所有功能。