那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Python到底是如何實現繼承的呢

冬至配餃子 ? 來源:多蘭多 ? 作者:Toranto ? 2022-08-18 15:46 ? 次閱讀

繼承

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

所謂繼承,就是重用現有類的功能,并在此基礎上進行擴展,將相關類的共性進行抽象、統一概念,隔離變化。

小明:“不會講話你就多講點?!?/p>

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

pYYBAGL97LqAP5eyAABs6DCMw1M861.png

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

poYBAGL97MSAQHkHAABl-ykIZS8247.pngpYYBAGL97PiAH9NtAACuPQjgkjw695.png


繼續昨天的蓋倫類和瑞文類:

pYYBAGL97RKADbKaAAEXjbnSljQ718.png


繼承的原理(了解)

那么Python到底是如何實現繼承的呢?

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

2、多個父類會根據它們在MRO列表中的順序被檢查;3、如果下一個類存在兩個合法的選擇(父類里面有重名的)選擇第一個父類。

Python當中這個列表的產生,決定了你屬性查找的方式,這個查找的方式分成兩種:

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

在Python中類是分為兩種的,新式類和經典類。這個區分只有pyhon2中才有,在python3里面已經沒有經典類一說,都是新式類。

那么到底什么是新式類、經典類?

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

pYYBAGL97TaAdLVEAABPTsyClSM208.pngpoYBAGL97USAO6xcAAB2AFj4MIc147.pngpoYBAGL97V-AFEt1AABW2tNwdxI807.pngpYYBAGL97WOAbcY3AABhru66Ljk883.png

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

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

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

在Python2中,默認都是經典類,只有顯示繼承了object的才是新式類:

poYBAGL97YCASXUMAAAypVpavFE146.png

在Python3中,取消了經典類,默認都是新式類,并且新式類不需要顯示繼承object對象。如下,這三種寫法都可以,無區別:

poYBAGL97ZCAI8dFAAA1asGJVYk268.png

多態

我們都知道,在python中,當一個變量被多次賦值的時候,它的傳達結果會表現為最后一次賦值,這是很典型的弱語言。

pYYBAGL97aaAY6cOAABYoimcdlA336.png


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

類的多態特性,需要滿足以下兩個條件:

1、繼承:多態一定是發生在父類和子類之間;

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

poYBAGL97b2AbL7mAAB65FwNiqM902.png

可以看到,Dog和Cat都繼承自Animal類,且各自都重寫了父類eat()方法。從運行結果可以看出,同一變量 a 在執行同一個 say() 方法時,由于 a 實際表示不同的類實例對象,因此 a.say() 調用的并不是同一個類中的 say() 方法,這就是多態。

換句話說,子類一旦重新定義了自己的屬性或方法且與父類重名,那么調用新增的屬性或方法時,就以自己為準了。

但有時候,在多態形成之后,我們又需要重新調用父類的同名方法時,我們有兩個選擇:

方法一:“指名道姓”地調用某個類的功能(函數)。

pYYBAGL97dOAO62tAABu9u18_7k246.png

方法二:super(),調用super()會得到一個特殊的對象,該對象專門用來引用父類的屬性。

poYBAGL97eOAJUnOAABzygoRMFY266.png



審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 算法
    +關注

    關注

    23

    文章

    4630

    瀏覽量

    93351
  • python
    +關注

    關注

    56

    文章

    4807

    瀏覽量

    85037
收藏 人收藏

    評論

    相關推薦

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

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

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

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

    TLV320AIC3254內部中的ADC處理模塊和minidsp到底是什么關系?

    我想請問一下幾個問題: 1.3254內部中的ADC處理模塊和minidsp到底是什么關系,是并列的還是串行關系?還是ADC處理模塊就是minidsp特殊情況下的部分? 2.minidsp的抽取因子該怎么理解,到底怎么使用?
    發表于 10-31 06:02

    請問TPA3130D2的芯片絲印到底是PTPA3130還是TPA3130呀?

    TPA3130D2的芯片絲印到底是PTPA3130還是TPA3130呀
    發表于 10-23 06:13

    請問PCM2903C的溫度范圍到底是多少?

    如下圖,PCM2903C的溫度范圍到底是多少? 如果用在-25~85℃,是否會出問題?
    發表于 10-14 07:14

    放大器的共模輸入電壓到底是指什么?

    請問放大器的共模輸入電壓到底是指什么?
    發表于 09-19 07:17

    功放和運放到底是什么區別?

    想請問一下功放和運放到底是什么區別,感覺只要接一個小負載,運放的輸出電流也可以很大???到底有什么區別啊
    發表于 09-10 07:00

    請問LMV772到底是雙電源還是單電源?。?/a>

    請問LMV772到底是雙電源還是單電源???手冊前面寫的太模糊了。求指教
    發表于 09-09 07:10

    運放的輸入電容到底是什么?

    我想請問一下運放的輸入電容到底是什么?
    發表于 09-04 06:52

    LMH6502的輸入電壓到底是多少?

    LMH6502的輸入電壓到底是多少,我稍微給如大一點點的信號,放大不行還能接受,我衰減都失真,
    發表于 08-27 07:02

    運放旁路電容必須靠近芯片引腳的原因到底是什么?

    運放旁路電容必須靠近芯片引腳的原因到底是什么?有的說是怕走線的電感與旁路電容形成諧振,旁路電容靠近運放的時候走線的電感不應該更大了嗎(走線越長,走線的寄生電感也就越大)
    發表于 08-01 06:56

    對于STM8的固件庫,到底是怎么對文件進行配置的?

    對于STM8的固件庫,到底是怎么對文件進行配置的?
    發表于 05-17 15:59

    請問STM8L052R8的EEPROM到底是幾個block?

    哪位知道STM8L052R8的EEPROM到底是幾個block,手冊上寫的不清不楚,按FLASH說的話,052應該是高密度的,但是EEPROM只有256B,所以很亂,具體也不知道分為幾塊
    發表于 05-11 08:29

    共享單車到底是什么通信原理

    我們經常騎的共享單車到底是什么通信原理,有人了解過嗎? 一、智能車鎖 共享單車最核心的硬件是智能車鎖,主要用于實現控制和定位功能。
    發表于 04-09 10:33 ?938次閱讀
    共享單車<b class='flag-5'>到底是</b>什么通信原理

    共享單車到底是什么通信原理?

    我們經常騎的共享單車到底是什么通信原理,有人了解過嗎?下面寶藍小編就帶大家了解下。
    的頭像 發表于 02-25 10:32 ?1509次閱讀
    共享單車<b class='flag-5'>到底是</b>什么通信原理?
    淘金盈娱乐| 百家乐大娱乐场开户注册| 百家乐代理加盟| 做生意店铺缺西北角| KK百家乐现金网| 宝博百家乐娱乐城| 百家乐实时赌博| 百家乐园能贷款吗| 威尼斯人娱乐场28gxpjwnsr| 棋牌室营业执照| 泰顺县| 百家乐官网筹码防伪定制| 碧桂园太阳城户型图| 飞七棋牌游戏下载| 舞阳县| 百家乐官网棋牌官网| 博天堂百家乐官网的玩法技巧和规则 | 金寨县| 百家乐官网对保| 环球百家乐官网的玩法技巧和规则| 百家乐官网那里信誉好| 御匾会百家乐娱乐城| 百家乐娱乐网网77scs| 大发888娱乐城电话| 狮威娱乐| 真人百家乐官网怎么对冲| 圣安娜百家乐官网包杀合作| 免费百家乐官网追号软件| 澳门百家乐会出老千吗| 威尼斯人娱乐城真实网址| 网上棋牌赌博| 百家乐官网斗地主在哪玩| 波浪百家乐官网游戏中| 百家乐怎样捉住长开| 威尼斯人娱乐上网导航| 博彩论坛| 百家乐官网机器图片| 跨国际百家乐官网的玩法技巧和规则 | 百家乐官网换人| 百家乐双倍派彩的娱乐城| 新时代娱乐城开户|