你好,請看下面的例子和說明:python中類的初始化方法是__init__(),因此父類子類的初始化方法都是這個(gè),如果子類不實(shí)現(xiàn)這個(gè)函數(shù),初始化時(shí)調(diào)用父類的初始化函數(shù),如果子類實(shí)現(xiàn)這個(gè)函數(shù),就覆蓋了父類的這個(gè)函數(shù),既然繼承父類,就要在這個(gè)函數(shù)里顯式調(diào)用一下父類的__init__(),這跟C++,jAVA不一樣,他們是自動調(diào)用父類初始化函數(shù)的。調(diào)用父類函數(shù)有以下方法:class A:def method(self, arg):pass class B(A):def method(self, arg):# A.method(self,arg) # 1# super(B, self).method(arg) #2super().method(arg) #31.直接寫類名調(diào)用2.用super(type,obj).method(arg)方法調(diào)用。3.在類定義中調(diào)用本類的父類方法,可以直接super().method(arg).在代碼中調(diào)用對象的父類的方法的示例:ob = B()super(B,ob).method(arg) #調(diào)用class B的父類class A的method。初始化中調(diào)用父類初始化方法示例:class B(A):
我們提供的服務(wù)有:成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、靖安ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的靖安網(wǎng)站制作公司
目錄
python中的super,名為超類,可以簡單的理解為執(zhí)行父類的__init__函數(shù)。由于在python中不論是一對一的繼承,還是一子類繼承多個(gè)父類,都會涉及到執(zhí)行的先后順序的問題。那么本文就著重看下super的具體作用。
通過設(shè)計(jì)這樣一個(gè)案例,我們可以明確super的前后邏輯關(guān)系:先定義一個(gè)父類 initial ,在這個(gè)父類中有參數(shù)值 param 和函數(shù) func ,然后用子類 new 來繼承父類 initial 。繼承之后,在子類的 __init__ 函數(shù)中 super 執(zhí)行的前后去打印參數(shù)值 param 和函數(shù) func 的返回值,相關(guān)代碼如下所示:
代碼的執(zhí)行結(jié)果如下所示:
首先我們注意到,父類 initial 中的 __init__ 函數(shù)內(nèi)的打印語句,是在super之后才輸出的,這說明了, super 函數(shù)是在執(zhí)行父類的初始化操作。那么如果沒有執(zhí)行 super , new 子類對 initial 父類的繼承體現(xiàn)在哪里呢?答案就是父類的成員函數(shù),比如這樣的一個(gè)案例:
其實(shí)就是刪掉了子類中重載的成員函數(shù),那么得到的結(jié)果如下:
可以發(fā)現(xiàn)在執(zhí)行super之前就可以打印父類的 func 函數(shù)的函數(shù)值。所以python中繼承的邏輯是這樣的:
initial.func() new.__init__() new.func()/new.param super() initial.__init__()/initial.param new.__init__()/new.paraminitial.func() new.__init__() new.func()/new.param super() initial.__init__()/initial.param new.__init__()/new.param
也正是因?yàn)橹挥袌?zhí)行了 super 才能初始化父類中的成員變量,因此如果在super之前是無法訪問父類的成員變量的。
本文通過一個(gè)python的實(shí)際案例的設(shè)計(jì),來講解python面向?qū)ο蟮募夹g(shù)——類的繼承中必用的super函數(shù)的邏輯。其實(shí)我們可以把python中類的繼承理解成這樣的一個(gè)過程:當(dāng)我們在括號中明確了父類時(shí),其實(shí)已經(jīng)引用了父類的成員函數(shù),但是并沒有執(zhí)行父類的初始化函數(shù)。在執(zhí)行子類的初始化函數(shù)的同時(shí),會檢查是否重載了父類的成員函數(shù),如果重載則會直接覆蓋。而只有在執(zhí)行了super之后,才相當(dāng)于執(zhí)行了父類的初始化函數(shù),此時(shí)才可以訪問父類的成員變量。
本文首發(fā)鏈接為:
作者ID:DechinPhy
更多原著文章請參考:
打賞專用鏈接:
騰訊云專欄同步:
在 Python 中創(chuàng)建一個(gè)類及其對象
在 Python 中創(chuàng)建一個(gè)空類
在 Python 中使用 Type 創(chuàng)建類
在 Python 中創(chuàng)建和調(diào)用類的方法
使用 __init__() 方法為數(shù)據(jù)屬性賦值
在 Python 中更新對象屬性
在 Python 中刪除對象屬性和對象
在 Python 中檢查和比較對象的類型
在Python中將對象的所有屬性復(fù)制到另一個(gè)對象
在 Python 中迭代對象屬性
在 Python 中打印對象的所有屬性
在python中在運(yùn)行時(shí)創(chuàng)建類的數(shù)據(jù)屬性
在函數(shù)中將對象的實(shí)例作為參數(shù)傳遞
在 Python 中創(chuàng)建和使用自定義 Self 參數(shù)
使用self參數(shù)來維護(hù)對象的狀態(tài)
在 Python 中創(chuàng)建和使用靜態(tài)類變量
在 Python 中的一個(gè)函數(shù)上使用多個(gè)裝飾器
在 Python 中的方法中同時(shí)訪問 cls 和 self
從裝飾器訪問實(shí)例方法的類
使用給定的裝飾器獲取 Python 類的所有方法
裝飾一個(gè) class
將類字段作為參數(shù)傳遞給類方法上的裝飾器
在 Python 中創(chuàng)建多個(gè)傳入?yún)?shù)列表的類變量
Python 中的 wraps 裝飾器
使用可選參數(shù)構(gòu)建裝飾器
在 Python 中將參數(shù)傳遞給裝飾器
@property 裝飾器
類和函數(shù)的裝飾器
Python 中帶參數(shù)和返回值的裝飾器
Python 使用參數(shù) wraps 裝飾器
Python 裝飾器獲取類名
簡單裝飾器示例
在 Python 中使用 print() 打印類的實(shí)例
在 Python 中的類中將裝飾器定義為方法
獲取在 Python 中修飾的給定類的所有方法
帶參數(shù)和不帶參數(shù)的 Python 裝飾器
Python 中帶有 self 參數(shù)的類方法裝飾器
在 Python 中的另一個(gè)類中使用隱藏的裝飾器
裝飾器內(nèi)部的 self 對象
在 Python 中將多個(gè)裝飾器應(yīng)用于單個(gè)函數(shù)
Python 裝飾器獲取類實(shí)例
__init__ 和 __call__ 有什么區(qū)別
在 Python 中使用 __new__ 和 __init__
Python 中的迭代重載方法
在 Python 中使用迭代器反轉(zhuǎn)字符串
Python 中 __reversed__ 魔術(shù)方法
Python 中的 __getitem__ 和 __setitem__
在 Python 中使用 __getattr__ 和 __setattr__ 進(jìn)行屬性賦值
什么是 __del__ 方法以及如何調(diào)用它
創(chuàng)建類的私有成員
一個(gè) Python 封裝的例子
一個(gè) Python 組合的例子
一個(gè)Python聚合的例子
Python 中的單級、多級和多級繼承
在 Python 中獲取一個(gè)類的父類
Python 中的多態(tài)性
訪問 Child 類中的私有成員
Python 中的抽象類
創(chuàng)建一個(gè)抽象類來覆蓋 Python 中的默認(rèn)構(gòu)造函數(shù)
使一個(gè)抽象類繼承另一個(gè)抽象類
Python 中的 super 是做什么的
super() 如何在多重繼承中與 __init__() 方法一起工作
將 super 與類方法一起使用
mro 是做什么的
Python 中的元類是什么
元類的具體案例
在 Python 中使用元類的單例類
@staticmethod 和 @classmethod 有什么區(qū)別
Python 中的裝飾器是什么
制作函數(shù)裝飾器鏈
網(wǎng)站標(biāo)題:python類函數(shù)覆蓋 python 覆蓋
當(dāng)前地址:http://muchs.cn/article10/docosdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、小程序開發(fā)、企業(yè)網(wǎng)站制作、網(wǎng)站排名、ChatGPT、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)