91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python到底是如何實(shí)現(xiàn)繼承的呢

冬至配餃子 ? 來(lái)源:多蘭多 ? 作者:Toranto ? 2022-08-18 15:46 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

繼承

通過(guò)__init__類(lèi)構(gòu)造方法我們可以看出,我們定義出來(lái)的蓋倫類(lèi)和瑞文類(lèi)存在代碼冗余的現(xiàn)象,而我們寫(xiě)程序,最好是以簡(jiǎn)潔為目的。如果兩個(gè)程序都能達(dá)到相同的目標(biāo),一個(gè)五百行代碼,而另一個(gè)只有三百行代碼,毫無(wú)疑問(wèn)我們選擇后者。而且這也很方便我們查閱修改。

所謂繼承,就是重用現(xiàn)有類(lèi)的功能,并在此基礎(chǔ)上進(jìn)行擴(kuò)展,將相關(guān)類(lèi)的共性進(jìn)行抽象、統(tǒng)一概念,隔離變化。

小明:“不會(huì)講話你就多講點(diǎn)。”

簡(jiǎn)單地說(shuō),在python中,新建的類(lèi)可以繼承一個(gè)或者多個(gè)類(lèi)。父類(lèi)又可以稱(chēng)為基類(lèi)或者超類(lèi),新建的類(lèi)稱(chēng)為派生類(lèi)或者子類(lèi)。

pYYBAGL97LqAP5eyAABs6DCMw1M861.png

簡(jiǎn)單地說(shuō),在python中,新建的類(lèi)可以繼承一個(gè)或者多個(gè)類(lèi)。父類(lèi)又可以稱(chēng)為基類(lèi)或者超類(lèi),新建的類(lèi)稱(chēng)為派生類(lèi)或者子類(lèi)。

poYBAGL97MSAQHkHAABl-ykIZS8247.pngpYYBAGL97PiAH9NtAACuPQjgkjw695.png


繼續(xù)昨天的蓋倫類(lèi)和瑞文類(lèi):

pYYBAGL97RKADbKaAAEXjbnSljQ718.png


繼承的原理(了解)

那么Python到底是如何實(shí)現(xiàn)繼承的呢?

對(duì)于你定義的每一個(gè)類(lèi),python會(huì)計(jì)算出一個(gè)方法解析順序(MRO)列表,python會(huì)在MRO列表上從左到右開(kāi)始查找基類(lèi),直到找到第一個(gè)匹配這個(gè)屬性的為止。而這個(gè)MRO列表的構(gòu)造是通過(guò)一個(gè)C3線性化算法來(lái)實(shí)現(xiàn)的。我們不去深究這個(gè)算法的數(shù)學(xué)原理,只需要知道C3算法計(jì)算出來(lái)的列表,我找屬性應(yīng)該遵循什么樣的原則:1、子類(lèi)會(huì)先于父類(lèi)被檢查;

2、多個(gè)父類(lèi)會(huì)根據(jù)它們?cè)贛RO列表中的順序被檢查;3、如果下一個(gè)類(lèi)存在兩個(gè)合法的選擇(父類(lèi)里面有重名的)選擇第一個(gè)父類(lèi)。

Python當(dāng)中這個(gè)列表的產(chǎn)生,決定了你屬性查找的方式,這個(gè)查找的方式分成兩種:

深度優(yōu)先(先深入繼承樹(shù)左側(cè)查找,然后再返回,開(kāi)始查找右側(cè))和廣度優(yōu)先(先從左到右水平方向上查找,最后再深入繼承樹(shù)右側(cè)查找)。本質(zhì)查找還是按照MRO列表,深度優(yōu)先和廣度優(yōu)先的區(qū)別就是排列方式不一樣。

在Python中類(lèi)是分為兩種的,新式類(lèi)和經(jīng)典類(lèi)。這個(gè)區(qū)分只有pyhon2中才有,在python3里面已經(jīng)沒(méi)有經(jīng)典類(lèi)一說(shuō),都是新式類(lèi)。

那么到底什么是新式類(lèi)、經(jīng)典類(lèi)?

python2才有新式類(lèi)和經(jīng)典類(lèi)的概念(繼承了object的類(lèi)就是新式類(lèi),反之就是經(jīng)典類(lèi))。python3統(tǒng)一都是新式類(lèi),也就是都繼承了object。

pYYBAGL97TaAdLVEAABPTsyClSM208.pngpoYBAGL97USAO6xcAAB2AFj4MIc147.pngpoYBAGL97V-AFEt1AABW2tNwdxI807.pngpYYBAGL97WOAbcY3AABhru66Ljk883.png

小明:“那個(gè),那個(gè),那個(gè)什么object的玩意兒是什么東西?”

Toranto:“我也不知道...”

小明:“來(lái),吃藥?!?/p>

在Python2中,默認(rèn)都是經(jīng)典類(lèi),只有顯示繼承了object的才是新式類(lèi):

poYBAGL97YCASXUMAAAypVpavFE146.png

在Python3中,取消了經(jīng)典類(lèi),默認(rèn)都是新式類(lèi),并且新式類(lèi)不需要顯示繼承object對(duì)象。如下,這三種寫(xiě)法都可以,無(wú)區(qū)別:

poYBAGL97ZCAI8dFAAA1asGJVYk268.png

多態(tài)

我們都知道,在python中,當(dāng)一個(gè)變量被多次賦值的時(shí)候,它的傳達(dá)結(jié)果會(huì)表現(xiàn)為最后一次賦值,這是很典型的弱語(yǔ)言。

pYYBAGL97aaAY6cOAABYoimcdlA336.png


我們先后調(diào)用了Dog和Cat中的eat方法,a被先后賦值為“吃骨頭”,“吃魚(yú)”,但這并不是多態(tài)。

類(lèi)的多態(tài)特性,需要滿足以下兩個(gè)條件:

1、繼承:多態(tài)一定是發(fā)生在父類(lèi)和子類(lèi)之間;

2、重寫(xiě):子類(lèi)重寫(xiě)了父類(lèi)的方法。

poYBAGL97b2AbL7mAAB65FwNiqM902.png

可以看到,Dog和Cat都繼承自Animal類(lèi),且各自都重寫(xiě)了父類(lèi)eat()方法。從運(yùn)行結(jié)果可以看出,同一變量 a 在執(zhí)行同一個(gè) say() 方法時(shí),由于 a 實(shí)際表示不同的類(lèi)實(shí)例對(duì)象,因此 a.say() 調(diào)用的并不是同一個(gè)類(lèi)中的 say() 方法,這就是多態(tài)。

換句話說(shuō),子類(lèi)一旦重新定義了自己的屬性或方法且與父類(lèi)重名,那么調(diào)用新增的屬性或方法時(shí),就以自己為準(zhǔn)了。

但有時(shí)候,在多態(tài)形成之后,我們又需要重新調(diào)用父類(lèi)的同名方法時(shí),我們有兩個(gè)選擇:

方法一:“指名道姓”地調(diào)用某個(gè)類(lèi)的功能(函數(shù))。

pYYBAGL97dOAO62tAABu9u18_7k246.png

方法二:super(),調(diào)用super()會(huì)得到一個(gè)特殊的對(duì)象,該對(duì)象專(zhuān)門(mén)用來(lái)引用父類(lèi)的屬性。

poYBAGL97eOAJUnOAABzygoRMFY266.png



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4784

    瀏覽量

    98076
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4876

    瀏覽量

    90057
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    Python運(yùn)行本地Web服務(wù)并實(shí)現(xiàn)遠(yuǎn)程訪問(wèn)

    本文介紹使用Python搭建本地Web服務(wù)并結(jié)合 ZeroNews 實(shí)現(xiàn)公網(wǎng)訪問(wèn)。
    的頭像 發(fā)表于 02-06 11:39 ?157次閱讀
    <b class='flag-5'>Python</b>運(yùn)行本地Web服務(wù)并<b class='flag-5'>實(shí)現(xiàn)</b>遠(yuǎn)程訪問(wèn)

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    MOS管到底是什么?和三極管、繼電器有什么本質(zhì)區(qū)別?在電子設(shè)備的“心臟”部位,藏著許多默默工作的“開(kāi)關(guān)選手”。它們操控著電流的通斷,決定著設(shè)備的效率與穩(wěn)定性。其中,MOS管作為近年來(lái)高頻
    的頭像 發(fā)表于 01-07 13:46 ?545次閱讀
    MOS管<b class='flag-5'>到底是</b>什么?和三極管、繼電器有什么本質(zhì)區(qū)別?

    Stack棧到底用來(lái)干嘛的

    Stack_Size就是棧大小,0x00000400就是代表有1K(0x400/1024)的大小。 那這個(gè)棧到底用來(lái)干嘛的? 比如說(shuō)我們函數(shù)的形參、以及函數(shù)里定義的局部變量就是存儲(chǔ)在棧里,所以
    發(fā)表于 12-01 08:04

    IGBT到底是什么?-從名稱(chēng)入手來(lái)帶您了解

    對(duì)于工作需要用到IGBT、但從未專(zhuān)業(yè)學(xué)習(xí)過(guò)IGBT的人來(lái)說(shuō), IGBT到底是什么、它為什么叫IGBT、它的核心關(guān)鍵詞是什么、要怎么理解它 等一系列問(wèn)題并無(wú)法一次性在某個(gè)地方獲取到,都需要查閱大量的資料,學(xué)習(xí)大量的基礎(chǔ)才能有個(gè)初步的了解。 為了讓更多的人在更少的時(shí)間內(nèi)掌握IGBT,我將在
    的頭像 發(fā)表于 11-25 17:38 ?1541次閱讀
    IGBT<b class='flag-5'>到底是</b>什么?-從名稱(chēng)入手來(lái)帶您了解

    請(qǐng)問(wèn)Keil中的map文件到底是什么意思?

    Keil中的map文件到底是什么意思?里面是如何進(jìn)行相關(guān)執(zhí)行操作的
    發(fā)表于 11-25 06:59

    單片機(jī)和嵌入式,到底是什么關(guān)系?

    的關(guān)系:什么是單片機(jī)?什么是嵌入式?它們到底是不是一回事?先說(shuō)說(shuō)大家最先聽(tīng)說(shuō)的那個(gè)詞——單片機(jī)(MCU)。單片機(jī),全稱(chēng)是MicrocontrollerUnit,顧名思
    的頭像 發(fā)表于 11-14 10:28 ?1515次閱讀
    單片機(jī)和嵌入式,<b class='flag-5'>到底是</b>什么關(guān)系?

    單片機(jī)的差分信號(hào)到底是什么?

    差分信號(hào)到底是什么?通俗來(lái)講,就是驅(qū)動(dòng)端發(fā)送兩個(gè)等值、反相的信號(hào),接收端通過(guò)比較這兩個(gè)電壓的差值來(lái)判斷邏輯狀態(tài)“0”還是“1”。 差分信號(hào)的產(chǎn)生是由輸入源發(fā)出信號(hào)后經(jīng)過(guò)緩沖器和倒相器后,所產(chǎn)生
    發(fā)表于 11-12 06:44

    IEC 到底是什么?為什么它能影響全球?

    IEC 到底是什么?為什么它能影響全球?
    的頭像 發(fā)表于 09-04 17:07 ?3572次閱讀

    DDS-TSN 到底是如何實(shí)現(xiàn)的?

    概述1.1TSN與DDS的獨(dú)立優(yōu)勢(shì)與局限隨著智能網(wǎng)聯(lián)汽車(chē)和車(chē)載網(wǎng)絡(luò)架構(gòu)的不斷迭代,車(chē)載網(wǎng)絡(luò)對(duì)實(shí)時(shí)性、確定性和高效數(shù)據(jù)分發(fā)的需求日益嚴(yán)苛。TSN和DDS的結(jié)合為車(chē)載以太網(wǎng)提供了確定性實(shí)時(shí)通信(TSN)與靈活數(shù)據(jù)分發(fā)(DDS)的雙重優(yōu)勢(shì),尤其適用于自動(dòng)駕駛、智能座艙等高要求場(chǎng)景。圖1DDS協(xié)議概述其中,數(shù)據(jù)分發(fā)服務(wù)(DDS)是對(duì)象管理組織(OMG)制定的一系列標(biāo)
    的頭像 發(fā)表于 08-13 10:07 ?5884次閱讀
    DDS-TSN <b class='flag-5'>到底是</b>如何<b class='flag-5'>實(shí)現(xiàn)</b>的?

    晶振的 “負(fù)載電容” 到底是什么

    負(fù)載電容,到底是什么? 負(fù)載電容,簡(jiǎn)單來(lái)說(shuō),是指晶振的兩條引線連接IC塊內(nèi)部及外部所有有效電容之和,我們可以將其看作晶振片在電路中串接的電容。從更專(zhuān)業(yè)的角度講,它是為了使晶振能夠在其標(biāo)稱(chēng)頻率下穩(wěn)定
    的頭像 發(fā)表于 07-25 16:26 ?1071次閱讀

    請(qǐng)問(wèn)編譯純r(jià)tos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?

    編譯純r(jià)tos到底是選擇Linux+rtos的sdk編譯only rtos還是直接使用rtos sdk?
    發(fā)表于 07-11 07:22

    目前Mirco Python sdk觸摸到底支持什么驅(qū)動(dòng)啊 ?

    目前的Mirco Python sdk觸摸到底支持什么驅(qū)動(dòng)啊 能不能有資料詳細(xì)說(shuō)明 GT911 觸摸驅(qū)動(dòng)是否支持啊
    發(fā)表于 06-24 07:02

    智能盒子到底是什么東西?昇騰310深度測(cè)評(píng):為何能成為行業(yè)新寵?

    讓人摸不著頭腦的“智能盒子”。各位搞技術(shù)、搞工程的朋友,咱們?cè)诠ぷ髦惺遣皇墙?jīng)常聽(tīng)到“智能盒子”這個(gè)說(shuō)法?每次聽(tīng)到這個(gè)詞,我猜很多人心里都在犯嘀咕:這東西到底是個(gè)啥玩意兒?難道就是個(gè)裝了點(diǎn)智能軟件的普通盒子?它到底有啥用?能給咱們的工作帶來(lái)啥方便?
    的頭像 發(fā)表于 04-27 10:46 ?1891次閱讀
    智能盒子<b class='flag-5'>到底是</b>什么東西?昇騰310深度測(cè)評(píng):為何能成為行業(yè)新寵?

    一文給你講透!DA板卡到底是什么?它和主板又有哪些不同?

    大家好,我是老王,在電子行業(yè)干了十幾年,今天我就用“大白話”給大家講講DA板卡到底是啥,它和咱們常說(shuō)的“主板”有啥區(qū)別。文章里會(huì)穿插一些表格和實(shí)際案例,保證你讀完不僅能懂,還能跟朋友吹牛!
    的頭像 發(fā)表于 04-24 16:48 ?2407次閱讀
    一文給你講透!DA板卡<b class='flag-5'>到底是</b>什么?它和主板又有哪些不同?

    使用燒錄器STLINK V3 mini的時(shí)候,發(fā)現(xiàn)14PIN的接口上面有一個(gè)GNDDETECT PIN,Type是輸出結(jié)構(gòu),這個(gè)PIN到底是干啥用的?

    我在使用燒錄器STLINK V3 mini的時(shí)候,發(fā)現(xiàn)14PIN的接口上面有一個(gè)GNDDETECT PIN,Type 是輸出結(jié)構(gòu),我想知道這個(gè)PIN到底是干啥用的?要怎么接才合理?
    發(fā)表于 03-14 09:39