chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

繼承

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

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

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

簡單地說,在python中,新建的類可以繼承一個(gè)或者多個(gè)類。父類又可以稱為基類或者超類,新建的類稱為派生類或者子類。

pYYBAGL97LqAP5eyAABs6DCMw1M861.png

簡單地說,在python中,新建的類可以繼承一個(gè)或者多個(gè)類。父類又可以稱為基類或者超類,新建的類稱為派生類或者子類。

poYBAGL97MSAQHkHAABl-ykIZS8247.pngpYYBAGL97PiAH9NtAACuPQjgkjw695.png


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

pYYBAGL97RKADbKaAAEXjbnSljQ718.png


繼承的原理(了解)

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

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

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

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

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

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

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

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

pYYBAGL97TaAdLVEAABPTsyClSM208.pngpoYBAGL97USAO6xcAAB2AFj4MIc147.pngpoYBAGL97V-AFEt1AABW2tNwdxI807.pngpYYBAGL97WOAbcY3AABhru66Ljk883.png

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

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

小明:“來,吃藥?!?/p>

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

poYBAGL97YCASXUMAAAypVpavFE146.png

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

poYBAGL97ZCAI8dFAAA1asGJVYk268.png

多態(tài)

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

pYYBAGL97aaAY6cOAABYoimcdlA336.png


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

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

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

2、重寫:子類重寫了父類的方法。

poYBAGL97b2AbL7mAAB65FwNiqM902.png

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

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

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

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

pYYBAGL97dOAO62tAABu9u18_7k246.png

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

poYBAGL97eOAJUnOAABzygoRMFY266.png



審核編輯:劉清

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

    關(guān)注

    23

    文章

    4759

    瀏覽量

    97115
  • python
    +關(guān)注

    關(guān)注

    57

    文章

    4856

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

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

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

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

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

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

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

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

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

    請(qǐng)問編譯純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ì)說明 GT911 觸摸驅(qū)動(dòng)是否支持啊
    發(fā)表于 06-24 07:02

    ADS1298 RDATAC Opcode時(shí),START到底是低還是高?

    您好,1298的datasheet看到這有點(diǎn)糊涂了。 1、RDATAC Opcode時(shí),START到底是低還是高? 從時(shí)序圖上看實(shí)線是高、虛線是低,請(qǐng)問實(shí)線虛線有什么區(qū)別? 2、同時(shí)在DOUT
    發(fā)表于 02-14 07:48

    ADS1298 tdr的值到底是多大,跟采樣率等有沒有什么關(guān)系?

    我想請(qǐng)問一下, 1、tdr的值到底是多大,跟采樣率等有沒有什么關(guān)系。數(shù)據(jù)手冊(cè)上只找到建立時(shí)間,好像沒有這個(gè)時(shí)間的值,28頁那個(gè)最小SCLK時(shí)鐘為110khz是怎么計(jì)算的。 2、 tdr到底是
    發(fā)表于 02-13 06:11

    ADS1298的操作溫度范圍到底是多少?

    ADS1298是 0°Cto +70°C;工業(yè)級(jí)ADS1298I 是 –40°Cto +85°C。 現(xiàn)在不知道ADS1298的操作溫度范圍到底是多少?
    發(fā)表于 02-10 07:19

    ADS1298ECG-FE原理圖上看見很多NI的符號(hào), 到底是什么意思?

    我們?cè)贏DS1298ECG-FE原理圖上看見很多NI的符號(hào), 到底是什么意思? 具體的值是多少? 如下面兩個(gè)圖所示: R1, R2電阻的值是多少? 這個(gè)比較重要。 R59 - R66又是多少? 麻煩你們回答一下。 謝
    發(fā)表于 02-05 08:16

    ADS1278的參考電壓的要求到底是怎樣的?

    <27MHz為例,Vrefp輸入范圍為0.5到3.1V 而后文又提到,參考輸入電壓的范圍為AGND-0.4v to AVDD+0.4v 問題1. 這個(gè)參考電壓的要求到底是怎樣的? 問題2.
    發(fā)表于 01-23 08:02

    使用Python實(shí)現(xiàn)xgboost教程

    使用Python實(shí)現(xiàn)XGBoost模型通常涉及以下幾個(gè)步驟:數(shù)據(jù)準(zhǔn)備、模型訓(xùn)練、模型評(píng)估和模型預(yù)測。以下是一個(gè)詳細(xì)的教程,指導(dǎo)你如何在Python中使用XGBoost。 1. 安裝XGBoost
    的頭像 發(fā)表于 01-19 11:21 ?2193次閱讀

    ADS7864采樣頻率到底是由外部時(shí)鐘決定還是HOLDX信號(hào)頻率決定?

    ADS7864數(shù)據(jù)手冊(cè)上說當(dāng)采用8M外部時(shí)鐘的時(shí)候,采樣頻率為500kHz,但是有人說可以通過HOLDX頻率來控制采樣頻率,一個(gè)HOLDX下降沿采樣一次,HOLDX頻率就是采樣頻率。請(qǐng)問采樣頻率到底是由外部時(shí)鐘決定還是HOLDX信號(hào)頻率決定?
    發(fā)表于 01-14 06:47

    LM629 PID參數(shù)調(diào)節(jié),所謂的高頻震蕩到底是什么意思?

    為何我的系統(tǒng)一直沒有所謂的高頻震蕩這種現(xiàn)象;只是隨著Kd的增加,系統(tǒng)的阻尼開始變大而已。所謂的高頻震蕩到底是什么意思?
    發(fā)表于 01-01 07:30

    DAC3283到底是8位的LVDS輸入數(shù)據(jù)還是16位的LVDS輸入數(shù)據(jù)?

    請(qǐng)問這個(gè)DAC到底是8位的LVDS輸入數(shù)據(jù)還是16位的LVDS輸入數(shù)據(jù)啊。。也就是說,這個(gè)I路的15:8和7:0,是一個(gè)16位數(shù)據(jù)拆成了兩部分,高八位和第八位(其中又包含P和N),還是一個(gè)8位
    發(fā)表于 12-31 08:27