亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Init函數在python中的多重繼承中執行

Init函數在python中的多重繼承中執行

HUX布斯 2023-03-08 11:07:20
我是 python 的新手,正在嘗試了解 python 中的繼承。Python 具有多重繼承的特性。一個類可以同時繼承多個類。當我們創建子類的對象時,會調用子類的init函數。我想調用子類的兩個父類的 init 函數,但我只能調用一個 init 函數。我閱讀了方法解析順序的概念,最左邊的類繼承的 init 函數將被調用。請更正我的代碼,以便調用兩個父類的 init 函數。class A:    def __init__(self):        print("in A Init")    class B:    def __init__(self):        print("in B Init")    class C(B,A):    def __init__(self):        super().__init__()        print("in C Init")cObj= C()
查看完整描述

1 回答

?
MMTTMM

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給下一個參數。


查看完整回答
反對 回復 2023-03-08
  • 1 回答
  • 0 關注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號