中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

python的組合與繼承舉例分析

這篇文章主要講解了“python的組合與繼承舉例分析”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“python的組合與繼承舉例分析”吧!

創(chuàng)新互聯(lián)建站是一家專業(yè)提供東山企業(yè)網(wǎng)站建設,專注與網(wǎng)站設計制作、成都網(wǎng)站建設、H5場景定制、小程序制作等業(yè)務。10年已為東山眾多企業(yè)、政府機構(gòu)等服務。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站設計公司優(yōu)惠進行中。

組合

面向?qū)ο缶幊檀a復用的方式除了繼承還有組合,組合是指在一個類中有一部分數(shù)據(jù)是其他類的實例(對象)。

案例

有二個類,分別是圓形、圓環(huán),用組合的方式寫。

以下是圓形類:

class Circle:pi = 3.14159265358979def __init__(self, r) -> None:self.r = r

    @propertydef area(self):return self.pi*self.r**2@propertydef perimeter(self):return self.pi*self.r*2

以下是圓環(huán)類:

class Ring:def __init__(self, inner, outer):inner, outer = (inner, outer) if inner < outer else (outer, inner)self.inner = Circle(inner)self.outer = Circle(outer)@propertydef area(self):return self.outer.area-self.inner.area

    @propertydef perimeter(self):return self.outer.perimeter+self.inner.perimeter

注意

圓環(huán)類的init函數(shù),它的參數(shù)inner和outer是圓的半徑,代碼塊中首先判斷inner和outer兩個參數(shù)的大小,確保大的賦值給outer、小的賦值給inner,然后用inner和outer作參數(shù)分別調(diào)用Circle類創(chuàng)建inner實例和outer實例。因此創(chuàng)建Ring類的實例中會有2個屬性是Circle類的實例。

area方法和perimeter方法中都是調(diào)用了Circle中的對應方法進行計算。

總結(jié)

組合的方式可以提高代碼復用率,將來遇到需求變更(例如更改pi的精度,只要求小數(shù)點后2位)時只需要改動少量代碼,減少了出錯的概率,提高了代碼的可維護性。

繼承

繼承是一種定義類的方式,子類可以通過繼承來復用父類的數(shù)據(jù)和代碼塊。

子類中有一項非常重要的隱藏數(shù)據(jù)——類指針,訪問子類.變量(變量指向數(shù)據(jù)是它就是屬性、指向代碼塊時它就是方法)的時候如果子類中無此變量時,解釋器會通過類指針訪問其父類,若父類中也無此變量時會繼續(xù)向上訪問祖父類,若一直訪問到所有類的祖宗object類(在python中所有的類都繼承自object類)時仍然找不到這個變量時,解釋器就會報錯。注意:類指針是單向的!意思就是子類可以訪問父類的變量,而父類不能訪問子類的變量。

另外:python支持多繼承,而java只支持單繼承。

補充:學習繼承最重要的一點是搞清楚類指針、不同類的命名空間以及實例的命名空間創(chuàng)建、查找變量的過程,想要學明白的朋友最好是多閱讀代碼自己畫一下內(nèi)存示意圖。

案例

class Animal:kind = '動物'def __init__(self, name):self.name = namedef eat(self):print(f'{self.name}正在進食!')class Cat(Animal):def __init__(self, name, count=0):self.count = count
        Animal.__init__(self, name)def mousing(self):print(f'貓咪“{self.name}”捉住了{self.count}只老鼠')white_cat = Cat('大白貓')white_cat.count += 1white_cat.mousing()white_cat.eat()print(white_cat.kind)out:貓咪“大白貓”捉住了1只老鼠
大白貓正在進食!
動物

講解

以上是一個關(guān)于繼承的簡單案例,接下來我通過這個案例詳細梳理一下:

首先定義父類,父類是Animal,類體中有指向object類的類指針和kind屬性、__init__方法和eat方法,這些是所有動物的通用屬性和方法。寫代碼時父類代碼要放在子類代碼前面。

然后定義子類,定義子類Cat時將父類Animal當作參數(shù),這就是子類繼承了父類。類體中有指向Animal類的類指針、__init__方法和mousing方法,在__init__方法中初始化了count屬性(抓到老鼠的數(shù)量),其余的屬性則調(diào)用父類的__init__方法初始化。

接下來創(chuàng)建實例大白貓,創(chuàng)建實例時首先開辟一塊命名空間,在這塊內(nèi)存空間中創(chuàng)建一個指向Cat類的類指針,然后將該內(nèi)存空間的地址(該地址的名字叫self)傳給Cat類的__init__方法,再創(chuàng)建了self.count屬性,接下來調(diào)用父類的__init__方法創(chuàng)建了self.name屬性。所以實例“大白貓”的命名空間中有:指向Cat類的類指針、name屬性、count屬性。

注意:實例的屬性各不相同,所以屬性都放在實例自己的命名空間中。一個類的所有實例調(diào)用的方法都一樣,所以實例的方法都放在它們所屬類的命名空間中!

感謝各位的閱讀,以上就是“python的組合與繼承舉例分析”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對python的組合與繼承舉例分析這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

本文標題:python的組合與繼承舉例分析
網(wǎng)頁URL:http://www.rwnh.cn/article12/gsphdc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、服務器托管定制開發(fā)、外貿(mào)網(wǎng)站建設網(wǎng)站排名、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化
灵丘县| 桐乡市| 呼玛县| 高淳县| 阳城县| 隆德县| 新津县| 江西省| 泽普县| 霸州市| 广东省| 堆龙德庆县| 安乡县| 牡丹江市| 阜平县| 句容市| 唐河县| 咸宁市| 定边县| 连城县| 旬阳县| 镶黄旗| 额济纳旗| 崇明县| 岚皋县| 阳泉市| 桑植县| 汝阳县| 汉沽区| 文成县| 错那县| 额尔古纳市| 泰来县| 衡阳市| 德惠市| 辽阳县| 固阳县| 龙口市| 黔江区| 米脂县| 白朗县|