搜尋

首頁  >  問答  >  主體

python 中子类为什么要显示的调用父类的构造函数

解释器不自动调用么?

迷茫迷茫2873 天前867

全部回覆(2)我來回復

  • 天蓬老师

    天蓬老师2017-04-17 13:18:46

    因為子類別無法推論出該如何呼叫父類別的建構函數,例如

    class A():
      def __init__(a, b):
        pass
    
    class B(A):
      def __init__(c):
        pass
    

    觀察一下C++的建構子的處理情況,注意看第五條

    1. 如果子類別沒有定義建構方法,則呼叫父類別的無參數的建構方法。
    2. 如果子類別定義了建構方法,不論是無參數還是帶參數,在創建子類別的物件的時候,首先執行父類別無參數的建構方法,然後執行自己的建構方法。
    3. 在建立子類別物件時候,如果子類別的建構子沒有顯示呼叫父類別的建構函數,則會呼叫父類別的預設無參構造函數。
    4. 在建立子類別物件時候,如果子類別的建構子沒有顯示呼叫父類別的建構函式且父類別自己提供了無參建構函數,則會呼叫父類別自己的無參構造函數。
    5. 在建立子類別物件時候,如果子類別的建構子沒有顯示呼叫父類別的建構子且父類別只定義了自己的有參構造函數,則會出錯(如果父類別只有有參數的建構方法,則子類別必須顯示呼叫此帶參構造方法)。

    子類別的建構函數,可能父類別的參數個數、順序都與不一致,所以也無法推測出應該如何呼叫父類別的建構子。
    對於Python這種只能定義一個「建構子」的語言來說,也不能保證像C++一樣 肯定有一個無參數建構函數,所以...只能手動呼叫了

    回覆
    0
  • 阿神

    阿神2017-04-17 13:18:46

    為了給父類別的建構函式傳輸參數,而不是預設呼叫父類別的建構子

    ( python呼叫父類別函數的寫法蠻醜的

    回覆
    0
  • 取消回覆