Python 中的 super(類名, self).__init__() 的含義

cold_moon發表於2024-09-10

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__()

詳細解釋

  1. super(類名, self):

    • super() 是一個內建函式,用於呼叫父類的方法。
    • 類名 是當前類的名稱。
    • self 是當前類的例項。
    • super(類名, self) 返回一個臨時物件,該物件允許呼叫 類名 類的父類的方法。
  2. __init__():

    • __init__() 是類的初始化方法,用於在物件建立後進行初始化。
    • 透過呼叫 super(類名, self).__init__(),實際上是在呼叫 類名 類的父類的初始化方法。

主要功能

這段程式碼的主要功能是呼叫 類名 類的父類 nn.Module 的初始化方法,以確保 nn.Module 的初始化邏輯得以執行。這樣做的好處是,類名 類能夠繼承 nn.Module 的所有屬性和方法,從而成為一個有效的 PyTorch 神經網路模組。

透過這種方式,類名 類可以在不重複編寫 nn.Module 的初始化程式碼的情況下,利用 nn.Module 提供的功能,如引數管理、前向傳播等。

總結

雖然 __init__() 不是嚴格意義上的建構函式,但在 Python 中,它通常被稱為構造器,因為它在物件建立後立即執行,用於初始化物件的狀態。這段程式碼的主要功能是確保 類名 類的父類 nn.Module 的初始化邏輯得以執行,從而繼承其所有功能。

相關文章