什么是Python對(duì)象的繼承?針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。
成都創(chuàng)新互聯(lián)公司于2013年開(kāi)始,先為壺關(guān)等服務(wù)建站,壺關(guān)等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為壺關(guān)企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
淺談python的對(duì)象的三大特性之繼承
前面我們定義了人的類,并用這個(gè)類實(shí)例化出兩個(gè)人jack和lily,查看了它們的內(nèi)存空間。
現(xiàn)在我們?cè)賮?lái)看看類中所存在的對(duì)向?qū)ο缶幊痰娜筇匦灾^承的一些特性。
前面定義了一個(gè)人的類,可是我們還知道,人都有屬于自己的職業(yè),比如說(shuō)老師類,醫(yī)生類,警察類等。
我們可以為每個(gè)職業(yè)都定義一個(gè)類,按照前面的定義,我們可以使用下面的代碼來(lái)實(shí)現(xiàn)。
定義一個(gè)老師類:
class Teacher: def __init__(self,name,age,sex,course): self.name=name self.age=age self.sex=sex self.course=course def walk(self): print("%s is walking slow"%self.name) def teach(self): print("%s is teaching"%self.name)
定義一個(gè)學(xué)生類:
class Student: def __init__(self,name,age,sex,group): self.name=name self.age=age self.sex=sex self.group=group def walk(self): print("%s is walking slow"%self.name) def study(self): print("%s is studying hard"%self.name)
我們可以看到teacher和student類中,有很多重復(fù)的代碼。它們都有人類所共有的name,age,sex等特征,以及有人類有的walk這個(gè)技能,那么我們就可以把人類共有的name,age,sex特征和walk技能抽離出來(lái),生成一個(gè)人的類,然后用老師和學(xué)生的類來(lái)繼承人的類的這些特征和技能,這樣可以避免寫(xiě)重復(fù)的代碼。
繼承關(guān)系是子類繼承父類,是類與類之間的關(guān)系
解決代碼重用的問(wèn)題,減少代碼冗余,這就是我們說(shuō)的類的三大特征之一的繼承。
把兩個(gè)或多個(gè)類中的共同點(diǎn)抽離出來(lái),生成一個(gè)新的類,也就是被繼承的類,我們稱之為父類 把從父類中繼承特征和技能的類稱為子類或基類
具體實(shí)現(xiàn)代碼如下:
我們先把老師和學(xué)生中所重復(fù)的代碼抽離出來(lái),生成一個(gè)人類:
class Person: def __init__(self,name,age,sex): self.name=name self.age=age self.sex=sex def walk(self): print("%s is walking slow"%self.name)
然后定義一個(gè)老師類,來(lái)繼承人的類的一個(gè)特征和技能:
class Teacher(Person): def __init__(self, name, age, sex, course): Person.__init__(self, name, age, sex) self.course = course def teach(self): print("%s is teaching" % self.name)
最后,再定義一個(gè)學(xué)生類,來(lái)繼承人的類的一些特征和技能:
class Student(Person): def __init__(self, name, age, sex,group): Person.__init__(self, name, age, sex) self.group = group def study(self): print("%s is studying hard" % self.name)
類定義好了,在通過(guò)把類實(shí)例化生成一個(gè)學(xué)生和一個(gè)老師
t1=Teacher("Jack",18,"male","python") s1=Student("Tom",28,"female","group1")
就可以調(diào)用s1或t1的特征和技能了。
比如,我想知道學(xué)生的姓名和老師的年齡,就可以這樣做:
print(t1.age,s1.name)
輸出結(jié)果為:
18 Tom
調(diào)用老師t1的走路的技能:
t1.walk()
輸出為:
Jack is walking slow
調(diào)用老師t1的教書(shū)的技能:
t1.teach()
輸出為:
Jack is teaching
調(diào)用學(xué)生s1的走路的技能:
s1.walk()
輸出為:
Tom is walking slow
調(diào)用學(xué)生s1學(xué)習(xí)的技能:
s1.study()
輸出為:
Tom is studying hard
我們還可以使用下面的語(yǔ)句來(lái)查看子類Student所繼承的父類的名稱:
print(Student.__bases__)
得到結(jié)果如下:
(<class '__main__.Person'>,)
同樣的,打印子類Teacher的父類也會(huì)得到同樣的結(jié)果,顯示其父類為Person.
在上面的輸出中,可以看到輸出結(jié)果是一個(gè)元組。這樣的話,一個(gè)子類就可以繼承多個(gè)父類了。
查看子類的父類得到的結(jié)果是前面定義的Person類,那我們查看Person的類的話,會(huì)得到什么樣的結(jié)果呢?
print(Person.__bases__)
輸出為:
(<class 'object'>,)
其結(jié)果也是一個(gè)元組,但是這里出現(xiàn)了一個(gè)object,那么這個(gè)object又是什么東東?
事實(shí)上,在python3中,所有的類默認(rèn)都繼承object類。
在python中:
凡是繼承了object類的子類,以及該子類的子類都被為新式類;
沒(méi)有繼承object類的子類稱為經(jīng)典類.
所以python3中,所有的類都是新式類。
而在python2中,沒(méi)有繼承object的類,以及它的子類,通常稱為經(jīng)典類。
來(lái)看幾個(gè)例子:
這幾個(gè)例子,都是在python2的解釋器中運(yùn)行的:
>>> class Foo: ... pass ... >>> Foo.__bases__ () >>> class Bar(object): ... pass ... >>> Bar.__bases__ (<type 'object'>,)
可以看到,F(xiàn)oo這個(gè)類是一個(gè)經(jīng)典類,而定義的第二個(gè)Bar類則是一個(gè)新式類。
在定義老師和學(xué)生類的時(shí)候,在類的名字后面要加上被繼承的類Person的名字,以告訴python解釋器,這里調(diào)用了類的繼承的特性。
關(guān)于什么是Python對(duì)象的繼承問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
網(wǎng)站欄目:什么是Python對(duì)象的繼承
本文網(wǎng)址:http://aaarwkj.com/article2/gjcooc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、定制開(kāi)發(fā)、企業(yè)建站、標(biāo)簽優(yōu)化、網(wǎng)站維護(hù)、微信公眾號(hào)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)