python中的super如何使用
技術背景
python中的super,名為超類,可以簡單的理解為執(zhí)行父類的__init__函數(shù)。由于在python中不論是一對一的繼承,還是一子類繼承多個父類,都會涉及到執(zhí)行的先后順序的問題。那么本文就著重看下super的具體作用。
案例測試
通過設計這樣一個案例,我們可以明確super的前后邏輯關系:先定義一個父類initial
,在這個父類中有參數(shù)值param
和函數(shù)func
,然后用子類new
來繼承父類initial
。繼承之后,在子類的__init__
函數(shù)中super
執(zhí)行的前后去打印參數(shù)值param
和函數(shù)func
的返回值,相關代碼如下所示:
# 定義父類 class initial(object): def __init__(self): print ('This print is from initial object') # 定義父類參數(shù) self.param = 3 # 定義父類函數(shù) def func(self): return 1 # 定義子類 class new(initial): print ('This print is from new object') # 打印子類函數(shù)值 print (self.func()) # 執(zhí)行父類初始化函數(shù) super(new, self).__init__() # 打印父類參數(shù)值 print(self.param) self.param = 4 # 定義子類函數(shù) return 2 if __name__ == '__main__': new()
代碼的執(zhí)行結果如下所示:
This print is from new object
2
This print is from initial object
3
結果分析
首先我們注意到,父類initial
中的__init__
函數(shù)內的打印語句,是在super之后才輸出的,這說明了,super
函數(shù)是在執(zhí)行父類的初始化操作。那么如果沒有執(zhí)行super
,new
子類對initial
父類的繼承體現(xiàn)在哪里呢?答案就是父類的成員函數(shù),比如這樣的一個案例:
class initial(object): def __init__(self): print ('This print is from initial object') self.param = 3 def func(self): return 1 class new(initial): def __init__(self): print ('This print is from new object') print (self.func()) super(new, self).__init__() print(self.param) self.param = 4 if __name__ == '__main__': new()
其實就是刪掉了子類中重載的成員函數(shù),那么得到的結果如下:
This print is from new object
1
This print is from initial object
3
可以發(fā)現(xiàn)在執(zhí)行super之前就可以打印父類的func
函數(shù)的函數(shù)值。所以python中繼承的邏輯是這樣的:
也正是因為只有執(zhí)行了super
才能初始化父類中的成員變量,因此如果在super之前是無法訪問父類的成員變量的。
總結概要
本文通過一個python的實際案例的設計,來講解python面向對象的技術——類的繼承中必用的super函數(shù)的邏輯。其實我們可以把python中類的繼承理解成這樣的一個過程:當我們在括號中明確了父類時,其實已經引用了父類的成員函數(shù),但是并沒有執(zhí)行父類的初始化函數(shù)。在執(zhí)行子類的初始化函數(shù)的同時,會檢查是否重載了父類的成員函數(shù),如果重載則會直接覆蓋。而只有在執(zhí)行了super之后,才相當于執(zhí)行了父類的初始化函數(shù),此時才可以訪問父類的成員變量。
版權聲明
本文首發(fā)鏈接為:https://www.cnblogs.com/dechinphy/p/super.html
作者ID:DechinPhy
更多原著文章請參考:https://www.cnblogs.com/dechinphy/
打賞專用鏈接:https://www.cnblogs.com/dechinphy/gallery/image/379634.html
騰訊云專欄同步:https://cloud.tencent.com/developer/column/91958
到此這篇關于python中的super是什么?的文章就介紹到這了,更多相關python中的super內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解Python中使用base64模塊來處理base64編碼的方法
8bit的bytecode經常會被用base64編碼格式保存,Python中自帶base64模塊對base64提供支持,這里我們就來詳解Python中使用base64模塊來處理base64編碼的方法,需要的朋友可以參考下2016-07-07Python連接Oracle之環(huán)境配置、實例代碼及報錯解決方法詳解
這篇文章主要介紹了Python連接Oracle之環(huán)境配置、實例代碼及報錯解決方法詳解,需要的朋友可以參考下2020-02-02使用pyqt5 tablewidget 單元格設置正則表達式
今天小編就為大家分享一篇使用pyqt5 tablewidget 單元格設置正則表達式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12