css不继承父类样式_提升你的Python编程能力,细说类的继承,拿走不谢
今天咱們聊點(diǎn)啥呢?要不還是聊點(diǎn)Python基礎(chǔ)的東東吧,大家已經(jīng)都知道啦,Python呢是一種面向?qū)ο蟮哪_本編程語(yǔ)言,那面向?qū)ο蟮木幊陶Z(yǔ)言呢,都會(huì)支持面向?qū)ο蟮娜筇匦?#xff0c;你知道是哪三大特性嗎?當(dāng)然是咱們常常掛在嘴邊的封裝、繼承和多態(tài)啦,那今天呢,咱們就先說(shuō)個(gè)用得最多的繼承吧,好啦,就重點(diǎn)講講Python相關(guān)的類(lèi)的繼承啦!
好啦,那咱們就開(kāi)始聊聊吧!
Python類(lèi)的定義
首先開(kāi)門(mén)見(jiàn)山說(shuō)一下哦,Python的類(lèi)的繼承是支持多繼承機(jī)制的。
那Python的類(lèi)的繼承是怎樣的呢?其實(shí)呢,Python的類(lèi)繼承很簡(jiǎn)單哦,就是在定義子類(lèi)時(shí),將多個(gè)父類(lèi)放在子類(lèi)后面的圓括號(hào)中就可以啦!語(yǔ)法格式如下所示哦:
class SubClass (SuperClass1, SuperClass2, ...)
看到了嗎,Python類(lèi)的繼承定義的格式是不是很簡(jiǎn)單哦!只要在子類(lèi)的后面加個(gè)圓括號(hào),然后在括號(hào)里面添加上所要繼承的父類(lèi)就可以啦!
其實(shí)呢,Python類(lèi)和其他面向?qū)ο笳Z(yǔ)言是一樣滴,如果不顯示定義繼承一個(gè)父類(lèi),也是有個(gè)默認(rèn)的公共父類(lèi)哦,它就是object類(lèi),所以呀,object類(lèi)是所有Python類(lèi)的父類(lèi)哦,有兩種可能哦,一種可能是其直接父類(lèi),另一種可能呢當(dāng)然就是其間接父類(lèi)啦!
其實(shí)呢,如果從Python子類(lèi)和其父類(lèi)兩個(gè)角度來(lái)看的話(huà),是兩種不同的效果哦,子類(lèi)呢就相當(dāng)于對(duì)父類(lèi)進(jìn)行了擴(kuò)展啦,而父類(lèi)呢則是派生出子類(lèi)啦!
好啦,為了讓大家對(duì)Python類(lèi)的繼承有深入的理解,咱們還是老規(guī)矩啦,舉個(gè)“栗子”:
好啦,看到了嗎,上面的“栗子”程序中呢,定義了兩個(gè)父類(lèi),分別是Animal類(lèi)和Pig類(lèi)哦,然后呢,定義了一個(gè)子類(lèi)Peggy,它繼承了兩個(gè)父類(lèi),這個(gè)Peggy子類(lèi)呢并木有定義自己的程序單元哦,所以就用pass代替啦!
這樣,當(dāng)主程序創(chuàng)建了Peggy類(lèi)對(duì)象后呢,就可以訪(fǎng)問(wèn)Peggy類(lèi)中的對(duì)象啦,分別是繼承自父類(lèi)Animal的info()方法和繼承自Pig類(lèi)的taste()方法,這就是繼承的強(qiáng)大作用,就是相當(dāng)于子類(lèi)Peggy擴(kuò)展了父類(lèi)Animal和Pig哦。
好啦,咱們運(yùn)行一下上面這個(gè)“栗子”看看結(jié)果吧:
Python的多繼承
前面咱們說(shuō)啦,Python是支持多繼承的,但是呢,還是不建議大家用哦,因?yàn)槎嗬^承干的活單繼承都能干哦,而且,單繼承在流程和思路來(lái)說(shuō)更為清晰和易懂哦!
到這可能大家有問(wèn)題啦:人家Python自身都支持多繼承啦,你為啥還不推薦大家用呢,存在和支持就是有道理的啊?好啦,為了解答大家的這個(gè)疑惑,咱們就來(lái)聊聊多繼承的弊端吧!
首先呢,咱們來(lái)假定一個(gè)場(chǎng)景,就是哈,當(dāng)一個(gè)子類(lèi)有多個(gè)直接父類(lèi),也就是多繼承的話(huà),這個(gè)子類(lèi)呢就會(huì)繼承得到它的所有父類(lèi)的方法哦,這是大家所清楚的,但是呢,如果這個(gè)子類(lèi)所繼承的多個(gè)父類(lèi)中存在同名的方法時(shí)呢,這時(shí)會(huì)出現(xiàn)什么情況呢?在這呢,俺先賣(mài)個(gè)關(guān)子,咱們還是老慣例,舉個(gè)“栗子”讓大家看看啦,這樣印象更深刻哦!
好啦,看到上面這個(gè)“栗子”了嗎,咱們分別定義了兩個(gè)父類(lèi)SuperClass1和SuperClass2,這兩個(gè)父類(lèi)呢,有個(gè)共同點(diǎn),就是包含相同的info()方法哦,這是咱們?cè)俣x一個(gè)繼承了這兩個(gè)父類(lèi)的子類(lèi)SubClass,這時(shí)呢,咱們?cè)僦鞒绦蛑袆?chuàng)建了子類(lèi)SubClass的對(duì)象,然后用子類(lèi)對(duì)象sc去調(diào)用info()方法,你們猜這是會(huì)發(fā)生什么情況呢?
可以運(yùn)行一下看看哦:
看到了嗎,運(yùn)行后輸出的是父類(lèi)SuperClass1中的info()方法!在這先不給大家解釋哦,咱們修改一下上面的“栗子”,將SubClass子類(lèi)所繼承的兩個(gè)父類(lèi)的順序調(diào)換一下,看看結(jié)果如何哦,程序就編程如下樣式啦:
將兩個(gè)父類(lèi)的繼承順序進(jìn)行了位置調(diào)換哦,這時(shí)咱們?cè)龠\(yùn)行看看結(jié)果如何哦:
看到了嗎,這時(shí)輸出的是父類(lèi)SuperClass2中的info()方法哦!
好啦,到這呢,可能已經(jīng)由朋友看明白了,其實(shí)呢,在Python的多繼承中,如果子類(lèi)所繼承的父類(lèi)中出現(xiàn)了相同的方法,這時(shí)就會(huì)和子類(lèi)所繼承的父類(lèi)的順序有關(guān)哦,排在前面的父類(lèi)中的方法就會(huì)遮蓋排在后面的父類(lèi)中的方法哦!當(dāng)然啦,如果子類(lèi)所繼承的父類(lèi)中沒(méi)有相同的方法,就和父類(lèi)的順序沒(méi)有關(guān)系啦,因?yàn)樽宇?lèi)所調(diào)用的父類(lèi)的方法會(huì)按所繼承的父類(lèi)的順序查找,這時(shí)父類(lèi)因?yàn)闆](méi)有相同的方法,也就是方法是唯一的,它就是找到這個(gè)方法所在的父類(lèi),然后進(jìn)行調(diào)用哦!對(duì)于這點(diǎn)大家一定要牢記哦!
好啦,關(guān)于Python多繼承的弊端,相信大家通過(guò)上面的介紹已經(jīng)深刻理解了哈,因此呢,還是建議大家盡量少用多繼承哦!
好啦,今天關(guān)于Python的類(lèi)繼承相關(guān)的東東就先和大家聊這么多吧,咱們下次再見(jiàn)哦![再見(jiàn)]
敬請(qǐng)關(guān)注“品位集結(jié)號(hào)”,為您帶來(lái)意外的小知識(shí)![比心][握手][比心]
總結(jié)
以上是生活随笔為你收集整理的css不继承父类样式_提升你的Python编程能力,细说类的继承,拿走不谢的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 请教一下大神,有没有什么好用的实木家具?
- 下一篇: python中代理模式分为几种_通俗 P