Python基础系列讲解——继承派生和组合的概念剖析
Python作為一門面向對象的語言,它的面向對象體系中主要存在這么兩種關系,一個是“類”和“實例”的關系,另一個是“父類”和“子類”的關系。
所謂“類”是從一堆對象中以抽象的方式把相同的特征歸類得到的,“類”本身也是對象,可以更進一步抽象得到“抽象類”,“類”和“抽象類”兩者的區別在于前者是從現實對象抽象而來的,后者是基于類抽象而來的,因此“抽象類”只能被繼承,不能被實例化,好比我們有香蕉的類、蘋果的類、桃子的類,從這些類抽取相同的特征就是水果這個“抽象類”,我們吃水果時要么是吃一個具體的香蕉,要么是吃一個具體的桃子,無法吃到一個叫做水果的東西。
那么我們抽象得到的“抽象類”之后可以繼承的方式創建新類,此時原始類稱為“父類”或“超類、基類(Base class、Super class)”,新類稱為“子類”或“派生類”,當然抽象得到的“類”是可以創建“實例”的。總的來看,無論是繼承還是實例化,它們的前提是抽象過程,只有抽象得到“類”后才能展開繼承和實例化過程。
這里舉個形象的例子來說明下,比如奧巴馬和梅西這兩個對象抽象得到的共同的特征是人,那么人作為奧巴馬和梅西的一個“類”,將人、豬、狗這三個“類”抽象得到的共同的特征是動物,那么動物作為人、豬、狗的一個“父類”。反過來人、豬、狗這三個“類”繼承動物這個“父類”的特征,人這個“類”實例化得到了奧巴馬和梅西這兩個“對象”。
對于繼承和派生來說最大的好處是實現代碼的重用,比如我們定義了一個類ParentClass1,接著打算新建立另外一個類SubClass1,由于兩者的大部分內容相同,此時可以通過繼承的方式讓SubClass1繼承ParentClass1,這樣SubClass1則包含了ParentClass1所有的屬性,包括了變量(self.name、self.age)和方法(speak),降低了重復的編程工作量,并且派生得到的SubClass1中可以添加新的屬性,比如變量self.country和方法write,并不會影響到ParentClass1。(當子類新增的屬性與父類重名時,以子類的為準)
class ParentClass1: def __init__(self, name, age):self.name = nameself.age = agedef speak(self):print('speak ParentClass1')class SubClass1(ParentClass1): def __init__(self, name, age, country):ParentClass1.__init__(self, name, age) self.country = country def write(self):print('write SubClass1')b1 = SubClass1('jack', 21, 'China') print(b1.name) ——> jack print(b1.age) ——> 21 print(b1.country) ——> China b1.speak() ——> test ParentClass1 b1.write() ——> test SubClass1'叉車輪胎更換
上面展示的子類繼承一個父類,那么子類也可以繼承多個父類。比如子類SubClass2繼承了ParentClass1和ParentClass2這兩個類。
class ParentClass1: def __init__(self, name, age):self.name = nameself.age = agedef speak(self):print('speak ParentClass1')class ParentClass2: def walk(self):print('walk ParentClass2')class SubClass2(ParentClass1,ParentClass2): def __init__(self, name, age, country):ParentClass1.__init__(self, name, age) self.country = country b2 = SubClass2('jack', 21, 'China') b2.speak() —— > speak ParentClass1 b2.walk() —— > walk ParentClass2除了繼承外,組合方式是將其他類作為屬性加入到類中來擴展自身的屬性資源,這樣可以有效地利用其他類的資源,增強代碼的重用性。組合與繼承的區別主要體現在概念思想上:繼承建立的“父類”和“子類”的關系是一種“是”的關系,比如程序員是人類,當“父類”和“子類”之間有很多共同的屬性時使用繼承比較合適;組合建立的類和組合類的關系是一種“有”的關系,比如程序員有電腦,會編程,而人類并不一定都具備,這樣可以把電腦這個“類”以組合的方式添加作為屬性,而不用重新再設計這個屬性。
class Human: def __init__(self, name, age):self.name = nameself.age = agedef speak(self):print('Human speak skill')class Computer:def __init__(self, model ,brand):self.model=modelself.brand=brandclass Programmer(Human): def __init__(self, name, age, country, computer):Human.__init__(self, name, age) self.country = country self.computer = computerb3=Programmer('jack', 21, 'China',Computer('X10','dell'))print(b3.computer.model,b3.computer.brand) —— > ('X10','dell')轉載于:https://www.cnblogs.com/xyou/p/9705877.html
總結
以上是生活随笔為你收集整理的Python基础系列讲解——继承派生和组合的概念剖析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Flutter 15: 图解 ListV
- 下一篇: 【Python爬虫学习笔记11】Queu