如何給女朋友解釋什麼是OOP編程中的繼承

情感導師 5085

 添加導師LINE:jaqg

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單幹貨

本文主要分享python語言有關繼承的相關知識點,包括父類,子類相關概念,子類如何繼承父類的屬性和方法,並在最後單獨介紹了子類如何正確處理__init__的參數繼承問題

01女朋友的疑問

剛放下電話···

女朋友:"剛才你怎麼在電話里說了好多次什麼'雞肋雞肋'的,難道你寫的項目沒啥用,要被開除了?

如何給女朋友解釋什麼是OOP編程中的繼承

我:「???!!!什麼雞肋,什麼項目要黃了,你說啥呢」

女朋友:「就你剛才說的什麼啥啥啥是雞肋,啥啥啥繼承啥的,我也聽不懂,我以為出啥事了呢?」

我:「沒事,那是我們的專業術語,是基礎的基,類別的類,不是你愛吃的那個雞肋」(一個白眼甩過去)

女朋友:「這名起的,和『沒用』掛上鈎了,啥意思,你給我普及一下,我也長長見識」

我:「簡單,通過繼承創建的類叫派生類,被繼承類的就叫做稱為基類,balabala····」

正當我說的激情四射的時候,一個抱枕甩了過來,女朋友:「說人話!!」

我:「中國有句俗語,龍生龍,鳳生鳳,老鼠的兒子會打動洞,這句話聽過吧」

女朋友:「廢話,接着說···」

我:「剛才說的龍,鳳,老鼠(每句話的第一個龍,鳳,老鼠),就可以理解為我剛才說的基類,負責將他們各自物種所具有的特徵,所擁有的技能傳下去,比如老鼠爸爸只能生老鼠兒子,而不能生個龍兒子出來,而且生出來的老鼠寶寶,除了會遺傳老鼠爸爸的所有物理特徵,也會擁有打洞的技能,balabala···像這種類似模版一樣,規範好特徵和技能,當別人要去創建和你類似的項目的時候,直接基於這個模版就行了,至於需要添加什麼新的屬於自己特色的特徵或者技能,就只需要在自己的項目上單獨添加就行了」

女朋友:「原來是這麼回事,聽起來也不難嘛,一分鐘我就學會了,真是個小天才」

我:···

02什麼是編程中的繼承

我們都知道,面向對象編程的語言具有三大特性,封裝,繼承,多態。其中最根本的就是「繼承」。在python這門語言中,繼承是針對於類來說的,是指一個類要使用另一個類中構造的代碼

03為什麼要使用繼承

使用更少的代碼快速實現另一個已存在的類的所有功能復用重複的代碼,減少冗餘

04如何正確地使用繼承

先介紹下繼承關係中的基類和派生類

1) 基類(父類)

任何一個類都可以作為父類存在,但這並不代表着你可以隨意的創建類去當作父類使用。一般父類要抽象成具有某一類基礎特徵和基礎技能的集合,這樣才能夠保證當其他類繼承這個父類的時候,不僅僅擁有父類所有的基礎功能,還可以擴展屬於自己的特殊屬性或方法

比如說我們想構建一個鳥類,鳥共有的特徵:可以飛,可以叫,都有翅膀,都有名字(假設),那麼像麻雀,燕子,啄木鳥等細分出來的鳥就可以繼承自鳥類,一旦繼承,自然擁有了鳥類所擁有的基礎技能

建立父類的方法與建立其他任何類的方法都相同,只是我們需要考慮的是一旦創建子類,子類將要使用哪些方法,接下來介紹子類

2) 派生類(子類)

子類是指從父類繼承的類,也就是說,每個子類都將能夠利用父類的方法和變量,那么子類如何使用,分以下幾個層次說明

a) 0x00 基礎繼承

比如我現在想要創建一個鴕鳥類,那麼鴕鳥類就可以直接使用鳥類的fly方法或者chirping方法,而不需要在自己的類中進行聲明,代碼如下

我們創建了一個Ostrich類,它正確的使用了Bird類的每個方法,即使我們沒有在Ostrich子類中定義這些方法。我們只需要將「 mary」的值傳遞給first_name變量就可以創建一個叫'mary'的鴕鳥對象了。

b) 0x01 構建專屬方法

當然,我們除了可以使用父類所有的功能,我們還可以拓展自己所特有的技能,在自己的類中進行實現即可

比如,我們給鴕鳥增加一個跑的動作

c) 0x02 重寫父類方法

有時候父類的公共方法可能不太適用於當前的子類,而子類也需要使用這個父類方法,那麼就可以通過在子類中重寫父類方法實現

比如說,鴕鳥也會飛,但是飛的不高,這個就需要重寫fly方法去覆蓋父類方法

看吧,我們的實例通過調用自己的fly方法,實現了定製化

d) 0x03 關於初始化方法__init__的參數問題

前面一直沒講實例化方法的參數問題,但是我相信肯定有些人會表示對這個參數怎麼使用有點邏輯亂,所以專門拿到最後來說,以下分幾點解釋下

子類參數意義: 在你的子類中,初始化方法中所有的參數都是給你自己用的,跟父類的參數無關。也就是說,比如鳥類傳進去first_name為'mary',那代表着一隻叫mary的鳥,而你在鴕鳥類同樣傳'mary',那麼此時就是一隻叫做mary的鴕鳥,和mary的鳥沒有一毛錢關係父類位置參數處理: 父類構建一個對象所需要的必須參數,作為子類也必須要有。因為子類是基於父類的初始化方法進行構建對象,那麼父類需要什麼條件初始化,也就代表着子類同樣需要什麼條件初始化,比如下面這樣

父類的默認參數(給了默認值的參數)處理

子類的參數可以使用*args,**kwargs

總結(__init__)來說,1.對於父類初始化方法中的參數不是特別多的情況下,建議都帶上,至於值,可以直接取父類的默認值,也可以自己定義當前類所需要的值;2.如果參數比較多,那這種一般默認值也非常多,那麼可以只帶必須要傳的參數(比如位置參數),其餘默認值不帶,如果需要使用個別默認值,單獨帶着使用並賦值即可;3.如果真是太懶了,又都是自己的項目,對自己的繼承非常熟悉了,可以直接寫位置參數,其餘用*args,**kwargs代替

我是一名奮戰在編程界的pythoner,工作中既要和數據打交道,也要和erp系統,web網站保持友好的溝通……時不時的會分享一些提高效率的編程小技巧,在實際應用中遇到的問題以及解決方案,或者源碼的閱讀等等,歡迎大家一起來討論!如果覺得寫得還不錯,歡迎關注點讚,謝謝。

評論列表

頭像
2024-09-18 20:09:01

現代年輕人的情感問題很多,需要這樣的情感諮詢師,很專業

頭像
2024-04-12 19:04:57

如果發信息,對方就是不回復,還不刪微信怎麼挽回?

 添加導師LINE:jaqg

獲取更多愛情挽回攻略 婚姻修復技巧 戀愛脫單幹貨

發表評論 (已有2條評論)