1 回答

TA貢獻1869條經驗 獲得超4個贊
所有__init__函數都需要調用super().__init__(),如下所示:
class A:
def __init__(self):
super().__init__()
print("in A Init")
class B:
def __init__(self):
super().__init__()
print("in B Init")
class C(B, A):
def __init__(self):
super().__init__()
print("in C Init")
c_obj= C()
當您調用它時,您會得到以下輸出:
in A Init
in B Init
in C Init
根據super()函數文檔,它返回對類的“父級或兄弟級”的引用,以方法解析順序中的下一個為準。在層次結構的頂部,它返回對隱式父類的引用object,它有一個__init__什么都不做的空方法。
為了使其正常工作,最好所有繼承的__init__函數都具有相同的簽名,包括公共基類;在這種情況下,簽名只是__init__(self)(沒有額外的參數),而公共基類是object,它也__init__(self)沒有額外的參數,所以這一切都很好。另一種常見模式是它們都采用關鍵字參數并傳遞**kwargs給下一個參數。
添加回答
舉報