python 中子类为什么要显示的调用父类的构造函数
迷茫
迷茫 2017-04-17 13:16:46
0
2
833

解释器不自动调用么?

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(2)
Peter_Zhu

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

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

class B(A):
  def __init__(c):
    pass

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

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

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

阿神

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

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板