python類函數(shù)覆蓋 python 覆蓋

如何在Python中調(diào)用父類的同名方法

你好,請看下面的例子和說明: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是什么?-

目錄

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編程基礎(chǔ)及應(yīng)用實(shí)驗(yàn)教程的實(shí)驗(yàn)文件

在 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)

搜索引擎優(yōu)化