前言
本文從代碼復(fù)用的角度一步一步演示如何從python普通代碼進(jìn)化到面向?qū)ο螅⑼ㄟ^代碼去解釋一些面向?qū)ο蟮睦碚摗K裕疚那懊娴膬?nèi)容都是非面向?qū)ο蟮恼Z法實(shí)現(xiàn)方式,只有在最結(jié)尾才給出了面向?qū)ο蟮暮唵握Z法介紹。各位道兄不妨一看,如果留下點(diǎn)筆墨指導(dǎo),本人感激不盡。
下面話不多說了,來一起看看詳細(xì)的介紹吧
最初代碼
3種動物牛Cow、羊Sheep、馬Horse發(fā)出的聲音各不相同,于是在同一個(gè)目錄下建立三個(gè)模塊文件:
$ tree ..|-- cow.py|-- horse.py`-- sheep.py
三個(gè)模塊文件的內(nèi)容都只定義了各自的speak()函數(shù):
# cow.pydef speak(): print("a cow goes moooo!")# sheep.pydef speak(): print("a sheep goes baaaah!")# horse.pydef speak(): print("a horse goes neigh!")然后當(dāng)前目錄下在創(chuàng)建一個(gè)程序文件main.py,導(dǎo)入這三個(gè)模塊文件,分別調(diào)用這三種動物的speak()函數(shù),它們將發(fā)出不同聲音:
# main.pyimport cow,sheep,horsecow.speak()sheep.speak()horse.speak()
讓代碼更具共性的兩種基本方法
上面的cow.py、sheep.py和horse.py中,都是speak()函數(shù),不同的是函數(shù)內(nèi)容,確切地說是函數(shù)內(nèi)容中print()輸出的部分不同,它們輸出的結(jié)構(gòu)是a 動物名 goes 叫聲!。于是為了讓代碼更具共性,或者說復(fù)用性更高,可以將各模塊文件中的動物名和叫聲都變得通用化。
目前來說,有兩種最基本的方式可以讓一段代碼變得更共性、共通用化:使用參數(shù)或變量、使用額外的輔助函數(shù)。當(dāng)然,除此之外還有更多的方法,但目前來說這兩種是最基本的,也是最容易理解的。
使用參數(shù)(變量)讓代碼更具共性
首先讓動物名變得共性化。可以讓speak()中的動物名使用一個(gè)參數(shù)來替代。例如名為self的參數(shù)變量(之所以使用self,是因?yàn)樵诿嫦驅(qū)ο笾兴刑厥夂x,后文解釋),于是修改這三個(gè)模塊文件:
# cow.pydef speak(self): print("a %s goes moooo!" % (self))# sheep.pydef speak(self): print("a %s goes baaaah!" % (self))# horse.pydef speak(self): print("a %s goes neigh!" %(self))它們現(xiàn)在在動物名上和參數(shù)名上已經(jīng)完全相同,需要調(diào)用它們時(shí),只需在函數(shù)調(diào)用處為他們傳遞不同的動物名即可。例如,在main.py中:
import cow,sheep,horsecow.speak("cow")sheep.speak("sheep")horse.speak("horse")使用輔助函數(shù)讓代碼更具共性
除了參數(shù)(變量),還可以定義額外的函數(shù)來上面的代碼變得更具共性。例如,這三種動物的叫聲,可以額外定義一個(gè)sound()函數(shù)描述它們。于是在前面的基礎(chǔ)上繼續(xù)修改這三個(gè)模塊文件:
# cow.pydef speak(self): print("a %s goes %s!" % (self,sound()))def sound(): return "moooo"# sheep.pydef speak(self): print("a %s goes %s!" % (self,sound()))def sound(): return "baaaah"# horse.pydef speak(self): print("a %s goes %s!" % (self,sound()))def sound(): return "neigh"
新聞熱點(diǎn)
疑難解答
圖片精選