摘要:子類繼承父類任何屬性,包括數(shù)據(jù)屬性和方法屬性。繼承,子類獲得了父類的全部功能多態(tài),子類的方法覆蓋了父類的方法在子類中,分別重新修改了方法的實現(xiàn),這種可以成為多態(tài)。
繼承的概念
在面向?qū)ο蟪绦蛟O(shè)計中,當(dāng)我們定義一個類class的時候,可以從某個現(xiàn)有的class繼承,新的class稱為子類(Subclass),而被繼承的class稱為基類、父類或超類(Base class、Super class)。
語法形式:
class new_class_name( base_class_1,base_class_2,…. ): pass
例如:
class Animal(object): def run(self): print("animal is running ...") # Dog繼承Animal,子類獲得了父類的全部功能 class Dog (Animal): pass class Cat(Animal): pass
繼承的好處
1、通過父類派生出子類,子類獲得了父類的全部功能。子類繼承父類任何屬性,包括數(shù)據(jù)屬性和方法屬性。
2、除了繼承父類的全部功能,還可以覆蓋父類的功能,或者定制只屬于自己的特定功能。
如上例子,Animal實現(xiàn)了run()方法。因此,Dog、Cat作為其子類,自動獲得了run()方法。
嘗試運(yùn)行下代碼:
>>> dog = Dog() >>> dog.run() animal is running ... >>> cat = Cat() >>> cat.run() animal is running ...二、多態(tài)
針對上述第2點,通過繼承覆蓋,可以給子類多帶帶增加或者修改一些方法。
class Animal(object): def run(self): print("animal is running ...") # Dog繼承Animal,子類獲得了父類的全部功能 class Dog (Animal): # 多態(tài),子類的方法覆蓋了父類的方法 def run(self): print("dog is running...") def eat(self): print("eating meat") class Cat(Animal): def run(self): print("cat is running ... ")
在子類中,分別重新修改了run()方法的實現(xiàn),這種可以成為“多態(tài)”。
類與數(shù)據(jù)類型
當(dāng)我們定義 了一個類,實際上也就定義了一種數(shù)據(jù)類型,與list、dict、string沒有差別。例如:
a = list() # a是list類型 b = Animal() # b是Animal類型 c = Dog() # c是Dog類型
我們可以通過isinstance()來判斷他們的類型:
>>> isinstance(a, list) True >>> isinstance(b, Animal) True >>> isinstance(c, Animal) True # 此處c不僅僅是Dog類型,還是Animal類型。 >>> isinstance(b, Dog) False
可以發(fā)現(xiàn),c對象不僅僅是Dog類型,還是Animal類型(Dog的父類)。但是反過來,Animal不是Dog類型。
即在繼承關(guān)系中,如果一個實例的數(shù)據(jù)類型是某個子類,那它的數(shù)據(jù)類型也可以被看做是父類。但是,如果一個實例的數(shù)據(jù)類型是父類,不可以被看做是子類。
嘗試如下運(yùn)行:
dog = Dog() dog.run() cat = Cat() cat.run() 結(jié)果就是: dog is running... cat is running...
在上述中,傳入dog和cat都是Animal類型,由于Animal類型有run()方法,因此,只要傳入的類型是Animal類或者子類,就會自動調(diào)用實際類型的run()方法,無需確切地知道它的子類型。但是具體調(diào)用的run()方法是作用在哪個對象上(具體調(diào)用哪個類的run()方法),由運(yùn)行時該對象的確切類型決定。
Dog類對run()方法進(jìn)行了重寫,則dog對象調(diào)用的是自身類里的run()方法,同理cat對象。
? thanks for watching, keep on updating...
點個贊再走吧
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44982.html
小編寫這篇文章的主要目的,主要是來給大家介紹關(guān)于Python的一些事情,主要還是涉及到面對面對象編程的一些實例,其中,主要涉及到的內(nèi)容涵蓋封裝、繼承、多態(tài)等多種形式,就具體的形式,下面就給大家詳細(xì)解答下?! ython是一門面向?qū)ο蟮恼Z言。面向?qū)ο蠖加腥筇匦裕悍庋b、繼承、多態(tài)?! ∠旅娣謩e來說說這三大特性: 1、封裝 隱藏對象的屬性和實現(xiàn)細(xì)節(jié),僅對外提供公共訪問方式。在python中用...
摘要:在面向?qū)ο蠓椒ㄖ幸话闶沁@樣表述多態(tài)性向不同的對象發(fā)送同一條消息,不同的對象在接收時會產(chǎn)生不同的行為即方法。也就是說,每個對象可以用自己的方式去響應(yīng)共同的消息。所謂消息,就是調(diào)用函數(shù),不同的行為就是指不同的實現(xiàn),即執(zhí)行不同的函數(shù)。 多態(tài)就是:定義一個類class X(animal) 中間繼承animal 實現(xiàn)的方法是.run() 方法繼承animal的實例是cat dog 他們默認(rèn)都有r...
摘要:編程中的繼承和多態(tài)其實跟生物學(xué)中的遺傳非常類似。中的類繼承了類中的所有方法和屬性,那么就有了所有的屬性和方法。當(dāng)然也可以在的基礎(chǔ)上添加屬性和方法,也可以修改繼承自的屬性和方法覆寫,。 編程中的繼承和多態(tài)其實跟生物學(xué)中的遺傳非常類似。例如兒子與父親相比較,有很多相同的地方,那么這就是遺傳;但是父子間也有很多不一樣的地方,那么這就是變異,也就是多態(tài)。 python中的Student類繼承了...
摘要:會造成內(nèi)存浪費(fèi)的問題構(gòu)造函數(shù)繼承聲明父類聲明子類生成實例組合式繼承組合式繼承是汲取了兩者的優(yōu)點,既避免了內(nèi)存浪費(fèi),又使得每個實例化的子類互不影響。 寫在前面 既然是淺談,就不會從原理上深度分析,只是幫助我們更好地理解... 面向?qū)ο笈c面向過程 面向?qū)ο蠛兔嫦蜻^程是兩種不同的編程思想,剛開始接觸編程的時候,我們大都是從面向過程起步的,畢竟像我一樣,大家接觸的第一門計算機(jī)語言大概率都是C語...
摘要:類的定義假如要定義一個類,表示二維的坐標(biāo)點最最基本的就是方法,相當(dāng)于的構(gòu)造函數(shù)。嚴(yán)格來講,并不支持多態(tài)。靜態(tài)類型的缺失,讓很難實現(xiàn)那樣嚴(yán)格的多態(tài)檢查機(jī)制。有時候,需要在子類中調(diào)用父類的方法。 類的定義 假如要定義一個類 Point,表示二維的坐標(biāo)點: # point.py class Point: def __init__(self, x=0, y=0): se...
閱讀 1447·2021-11-17 09:33
閱讀 3036·2021-10-13 09:39
閱讀 2712·2021-10-09 10:01
閱讀 2456·2021-09-29 09:35
閱讀 3907·2021-09-26 10:01
閱讀 3528·2019-08-26 18:37
閱讀 3156·2019-08-26 13:46
閱讀 1919·2019-08-26 13:39