天天看點

python中super()函數&&python中super().__init__()

前言

super() 函數是用于調用父類(超類)的一個方法。

super() 是用來解決多重繼承問題的,直接用類名調用父類方法在使用單繼承的時候沒問題,但是如果使用多繼承,會涉及到查找順序(MRO)、重複調用(鑽石繼承)等種種問題。【MRO 就是類的方法解析順序表, 其實也就是繼承父類方法時的順序表。】

文法

參數:

type:類

object-or-type:類,一般是 self。

Python3.x 和 Python2.x 的差別

Python 3 可以使用直接使用  super().xxx代替  super(Class, self).xxx  :

Python3.x 執行個體:

Python2.x 執行個體:

python中super().__init__()

簡單的說super().init(),就是繼承父類的init方法,同樣可以使用super()去繼承其他方法。

python中super()函數&&python中super().__init__()
python中super()函數&&python中super().__init__()
python中super()函數&&python中super().__init__()

最底層:先寫一個父類A

第二層:讓 B、C、D 繼承自A

第三層: E、F、G 繼承自B、C、D

看看G的繼承順序:

python中super()函數&&python中super().__init__()

我們發現G繼承自E, F是并列的,初始化的時候不會先把E初始化完畢才初始化F。

去期待陌生,去擁抱驚喜。