Python面向對象之繼承和組合用法實例分析
本文實例講述了Python面向對象之繼承和組合用法。分享給大家供大家參考,具體如下:
面向對象的組合用法
軟件重用的重要方式除了繼承之外還有另外一種方式,即:組合
組合指的是,在一個類中以另外一個類的對象作為數(shù)據(jù)屬性,稱為類的組合
圓環(huán)是由兩個圓組成的,圓環(huán)的面積是外面圓的面積減去內部圓的面積。圓環(huán)的周長是內部圓的周長加上外部圓的周長。
這個時候,我們就首先實現(xiàn)一個圓形類,計算一個圓的周長和面積。然后在"環(huán)形類"中組合圓形的實例作為自己的屬性來用
# -*-coding:utf-8 -*- #! python3 from math import pi class Circle: ''' 定義了一個圓形類; 提供計算面積(area)和周長(perimeter)的方法 ''' def __init__(self,radius): self.radius = radius def area(self): return pi * self.radius * self.radius def perimeter(self): return 2 * pi *self.radius circle = Circle(10) #實例化一個圓 area1 = circle.area() #計算圓面積 per1 = circle.perimeter() #計算圓周長 print(area1,per1) #打印圓面積和周長 class Ring: ''' 定義了一個圓環(huán)類 提供圓環(huán)的面積和周長的方法 ''' def __init__(self,radius_outside,radius_inside): self.outsid_circle = Circle(radius_outside) self.inside_circle = Circle(radius_inside) def area(self): return self.outsid_circle.area() - self.inside_circle.area() def perimeter(self): return self.outsid_circle.perimeter() + self.inside_circle.perimeter() ring = Ring(10,5) #實例化一個環(huán)形 print(ring.perimeter()) #計算環(huán)形的周長 print(ring.area()) #計算環(huán)形的面積
運行結果:
314.1592653589793 62.83185307179586
94.24777960769379
235.61944901923448
繼承
繼承是一種創(chuàng)建新類的方式,在python中,新建的類可以繼承一個或多個父類,父類又可稱為基類或超類,新建的類稱為派生類或子類
python中類的繼承分為:單繼承和多繼承
查看繼承
>>> SubClass1.__bases__ #__base__只查看從左到右繼承的第一個子類,__bases__則是查看所有繼承的父類 (<class '__main__.ParentClass1'>,) >>> SubClass2.__bases__ (<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)
提示:如果沒有指定基類,python的類會默認繼承object類,object是所有python類的基類,它提供了一些常見方法(如__str__
)的實現(xiàn)。
>>> ParentClass1.__bases__ (<class 'object'>,) >>> ParentClass2.__bases__ (<class 'object'>,)
繼承與抽象(先抽象再繼承)
抽象即抽取類似或者說比較像的部分。
抽象分成兩個層次:
1.將奧巴馬和梅西這倆對象比較像的部分抽取成類;
2.將人,豬,狗這三個類比較像的部分抽取成父類。
抽象最主要的作用是劃分類別(可以隔離關注點,降低復雜度)
繼承:是基于抽象的結果,通過編程語言去實現(xiàn)它,肯定是先經(jīng)歷抽象這個過程,才能通過繼承的方式去表達出抽象的結構。
抽象只是分析和設計的過程中,一個動作或者說一種技巧,通過抽象可以得到類
繼承與重用性
在開發(fā)程序的過程中,如果我們定義了一個類A,然后又想新建立另外一個類B,但是類B的大部分內容與類A的相同時
我們不可能從頭開始寫一個類B,這就用到了類的繼承的概念。
通過繼承的方式新建類B,讓B繼承A,B會‘遺傳'A的所有屬性(數(shù)據(jù)屬性和函數(shù)屬性),實現(xiàn)代碼重用
派生
當然子類也可以添加自己新的屬性或者在自己這里重新定義這些屬性(不會影響到父類),需要注意的是,一旦重新定義了自己的屬性且與父類重名,那么調用新增的屬性時,就以自己為準了。
在子類中,新建的重名的函數(shù)屬性,在編輯函數(shù)內功能的時候,有可能需要重用父類中重名的那個函數(shù)功能,應該是用調用普通函數(shù)的方式,即:類名.func()
,此時就與調用普通函數(shù)無異了,因此即便是self參數(shù)也要為其傳值.
在python3中,子類執(zhí)行父類的方法也可以直接用super
方法.
# -*-coding:utf-8 -*- #! python3 class A: def hahaha(self): print('A') class B(A): def hahaha(self): super().hahaha() #super(B,self).hahaha() #A.hahaha(self) print('B') a = A() b = B() b.hahaha() super(B,b).hahaha()
運行結果:
A
B
A
通過繼承建立了派生類與基類之間的關系,它是一種'是'的關系,比如白馬是馬,人是動物。
當類之間有很多相同的功能,提取這些共同的功能做成基類,用繼承比較好,比如教授是老師
更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經(jīng)典教程》
希望本文所述對大家Python程序設計有所幫助。
- python面向對象之類的繼承詳解
- Python面向對象封裝繼承和多態(tài)示例講解
- Python面向對象程序設計之繼承、多態(tài)原理與用法詳解
- Python面向對象之繼承原理與用法案例分析
- Python 面向對象之封裝、繼承、多態(tài)操作實例分析
- Python面向對象之繼承和多態(tài)用法分析
- Python3.5面向對象程序設計之類的繼承和多態(tài)詳解
- Python3.5面向對象與繼承圖文實例詳解
- Python面向對象程序設計類的封裝與繼承用法示例
- Python面向對象程序設計多繼承和多態(tài)用法示例
- Python面向對象程序設計之類的定義與繼承簡單示例
- Python面向對象之類的定義與繼承用法示例
- Python面向對象類編寫細節(jié)分析【類,方法,繼承,超類,接口等】
- Python面向對象程序設計OOP入門教程【類,實例,繼承,重載等】
- Python面向對象程序設計之繼承與多繼承用法分析
- Python面向對象類的繼承實例詳解
- Python面向對象類繼承和組合實例分析
- Python 面向對象編程的三大特性之繼承
相關文章
python實現(xiàn)監(jiān)控linux性能及進程消耗性能的方法
這篇文章主要介紹了python實現(xiàn)監(jiān)控linux性能及進程消耗性能的方法,需要的朋友可以參考下2014-07-07