国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

Python面向?qū)ο笾^承代碼詳解

2020-01-04 16:02:13
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

本文研究的主要是Python面向?qū)ο?/a>之繼承的相關(guān)內(nèi)容,具體如下。

Python 繼承

即一個(gè)派生類(derived class)繼承基類(bass class)字段和方法。繼承也允許把一個(gè)派生類的對(duì)象作為一個(gè)基類對(duì)象對(duì)待。例如,有這樣一個(gè)設(shè)計(jì),一個(gè)Cat類型的對(duì)象派生自Animal類,這是模擬”是一個(gè)(is-a)”關(guān)系(例如,Cat是一個(gè)Animal)。

繼承實(shí)現(xiàn)了代碼的重用。

繼承的基本語(yǔ)法:

class 派生類名(基類名1 [, 基類名2....]):

基類名寫在括號(hào)里,基本類是在類定義的時(shí)候,在元組之中指明的。如果在繼承元組中列了一個(gè)以上的類,那么它就被稱作”多重繼承” 。

多重繼承

Python支持多重繼承,也就是一個(gè)子類可以有多個(gè)父類,父類間用逗號(hào)隔開。

在多重繼承中,子類有那么多的父類,那子類實(shí)例化時(shí),構(gòu)造方法是怎樣調(diào)用的呢?

這里需要記住一點(diǎn):

多重繼承中,構(gòu)造方法以第一個(gè)父類為中心。如果子類重新定義了構(gòu)造方法,就不會(huì)調(diào)用父類的構(gòu)造方法,構(gòu)造就會(huì)只調(diào)用第一個(gè)父類的構(gòu)造方法,并且如果父類中有同名的方法時(shí),通過(guò)子類的實(shí)例對(duì)象去調(diào)用的該方法也是第一個(gè)父類中的方法。當(dāng)然如果你需要在子類中用來(lái)某個(gè)或某幾個(gè)父類的構(gòu)造方法,需要顯示的去調(diào)用父類的構(gòu)造方法。

在python中繼承中的一些特點(diǎn):

  1. 在繼承中基類的構(gòu)造(__init__()方法)不會(huì)被自動(dòng)調(diào)用,它需要在其派生類的構(gòu)造中親自專門調(diào)用。
  2. 在調(diào)用基類的方法時(shí),需要加上基類的類名前綴,且需要帶上self參數(shù)變量。區(qū)別于在類中調(diào)用普通函數(shù)時(shí)并不需要帶上self參數(shù)。
  3. Python總是首先查找對(duì)應(yīng)類型的方法,如果它不能在派生類中找到對(duì)應(yīng)的方法,它才開始到基類中逐個(gè)查找。(先在本類中查找調(diào)用的方法,找不到才去基類中找)。
  4. 子類只繼承父類所有公有的屬性和方法,并且也可以在子類中通過(guò)父類名來(lái)調(diào)用,而對(duì)于私有的屬性和方法,子類是不進(jìn)行繼承的,因此在子類中是無(wú)法通過(guò)父類名來(lái)訪問(wèn)的。

實(shí)例:

執(zhí)行結(jié)果:

Calling child1 constructor
Calling parent constructor
Calling child1 method
Calling parent method
Calling child2 method
Calling parent method
Calling parent method
Parent attribute : 200

解析:

這兩句是創(chuàng)建Child1類和Child2類的實(shí)例對(duì)象,創(chuàng)建實(shí)例對(duì)象時(shí),就會(huì)自動(dòng)去調(diào)類的構(gòu)造方法,如果子類中沒(méi)有建立自己的構(gòu)造方法,就會(huì)調(diào)用父類的構(gòu)造方法,所以打印結(jié)果為:

Calling child1 constructor
Calling parent constructor

c1.childMethod() # 調(diào)用子類的方法
c2.childMethod() # 調(diào)用子類的方法

上面兩句分別調(diào)用的是對(duì)應(yīng)子類的子類方法,由于在子類中都分別有調(diào)用父類的方法,所以打印結(jié)果為:

Calling child1 method
Calling parent method
Calling child2 method
Calling parent method

 

注意:

子類繼承父類以后,如果在子類在對(duì)父類的方法進(jìn)行改造時(shí),由需要用到父類的方法時(shí),這個(gè)時(shí)候在子類中想要調(diào)用父類的方法時(shí),該怎么做呢?有兩種方法:

  1. Parent.parentMethod(self)
  2. self.parentMethod()

第一種是直接用父類的類名.方法名去調(diào)用父類的方法,但是需要注意的時(shí),這種調(diào)用方法必須將self作為參數(shù)傳進(jìn)去并且作為第一個(gè)參數(shù),表示指向指向這個(gè)類的實(shí)例本身。

第二種是直接用self去調(diào)用父類的方法,為什么可以這樣調(diào)用呢?因?yàn)橐坏┳宇惱^承了父類,那么子類就擁有父類所有的方法和屬性,所以此時(shí)父類的方法和屬性就相當(dāng)于子類自己了,所以可以直接用self去直接調(diào)用實(shí)例的方法,而不用再傳入self參數(shù)了。

使用issubclass()或者isinstance()方法來(lái)檢測(cè)類之間的關(guān)系:

  1. issubclass() - 布爾函數(shù)判斷一個(gè)類是另一個(gè)類的子類或者子孫類, 語(yǔ)法:issubclass(sub,sup)
  2. isinstance(obj, Class) 布爾函數(shù)如果obj是Class類的實(shí)例對(duì)象或者是一個(gè)Class子類的實(shí)例對(duì)象則返回true。

總結(jié)

以上就是本文關(guān)于Python面向?qū)ο笾^承代碼詳解的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到
python教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仪征市| 精河县| 观塘区| 武强县| 米林县| 延长县| 三门县| 彭山县| 莫力| 河南省| 射洪县| 峨眉山市| 丹凤县| 贵阳市| 钟山县| 鸡泽县| 静海县| 长沙市| 眉山市| 周至县| 蒲江县| 庆城县| 和静县| 张掖市| 宽城| 吐鲁番市| 扎鲁特旗| 晴隆县| 商丘市| 梁山县| 怀安县| 湟源县| 新建县| 竹北市| 咸阳市| 宣化县| 鹰潭市| 宁津县| 安丘市| 新丰县| 双流县|