對(duì)于非程序員科班出身的技術(shù)人員,理解很多開(kāi)發(fā)思想領(lǐng)域里面的事情,其實(shí)是一件挺痛苦的事情,直到接觸到了Python當(dāng)中的類(lèi),我才明白了什么是面向?qū)ο?/span>,更多的理解還是要通過(guò)實(shí)際的代碼操練才能夠慢慢的掌握。 今天記錄一下什么是面向?qū)ο?,在Python的編程世界里為什么要用到類(lèi)。 一、面向?qū)ο?/strong>將大家共有的特性剝離出來(lái)進(jìn)行抽象的過(guò)程就是面向?qū)ο?,這是我對(duì)面向?qū)ο笞钪庇^的理解,例如我們?cè)诠S生產(chǎn)汽車(chē),每一款車(chē)都有自己的生產(chǎn)平臺(tái),試想一下這樣的場(chǎng)景,A款車(chē)有100個(gè)工人在獨(dú)立生產(chǎn),其中20個(gè)人生產(chǎn)底盤(pán),20個(gè)人研發(fā)發(fā)動(dòng)機(jī),40個(gè)人制作車(chē)架、車(chē)門(mén),20個(gè)人負(fù)責(zé)最終的車(chē)輛組裝,B款車(chē)同樣有100個(gè)人干著和A款車(chē)相同的事情,如果世界是這個(gè)樣子,豐田、大眾也早就倒閉了,不管是任何車(chē)型,雖然每款車(chē)都有自己獨(dú)立的生產(chǎn)平臺(tái),但是很多東西一定是具備相同屬性的,例如發(fā)動(dòng)機(jī)、方向盤(pán)、車(chē)座、輪胎,在小到螺絲帽等等,我們可以將這些共有的東西完全獨(dú)立出來(lái),變成每款車(chē)型的共有屬性,那么100個(gè)工人可能有50個(gè)人都是負(fù)責(zé)公共部分的,節(jié)省了人力成本的同時(shí),也節(jié)省了資源成本,例如我們要對(duì)座椅的尺寸進(jìn)行調(diào)整,那么僅需要對(duì)這50個(gè)人的工作內(nèi)容進(jìn)行調(diào)整即可,而不需要對(duì)每款車(chē)進(jìn)行獨(dú)立的操作,這就是面向?qū)ο鬄槲覀儙?lái)的好處。 二、Python中的面向?qū)ο蟆?lèi)簡(jiǎn)單的舉例了面向?qū)ο蟮纳a(chǎn)場(chǎng)景,我們?cè)偻ㄟ^(guò)Python中函數(shù)式編程和類(lèi)編程來(lái)對(duì)比各自的特點(diǎn)。 例如有一個(gè)簡(jiǎn)單的需求,就是開(kāi)發(fā)一個(gè)郵件客戶端程序,可以通過(guò)程序,自定義的發(fā)送我們想要發(fā)送的內(nèi)容。 1、函數(shù)式編程 我們通過(guò)上述偽代碼簡(jiǎn)單實(shí)現(xiàn)了郵件發(fā)送的需求,但如果想讓更多的人來(lái)使用使用這個(gè)功能,就會(huì)遇到一些問(wèn)題,例如大家的smtp、用戶口令都不一樣,我們就要改造代碼變成下面的樣子。 我們又通過(guò)上述方式實(shí)現(xiàn)了多人發(fā)送的功能,程序?qū)懙竭@里看起來(lái)貌似還沒(méi)什么問(wèn)題,但如果此時(shí)我們的程序需求又增加了,例如不只是發(fā)郵件了,同時(shí)要有接收、刪除、等等功能,我們的代碼又變成下面的樣子。 我們看僅一個(gè)用戶想要實(shí)現(xiàn)三個(gè)功能時(shí),就需要寫(xiě)這么多代碼,此時(shí)代碼顯的就有些累贅了,更致命的是如果smtp的地址變了,我要把每個(gè)功能函數(shù)的傳遞參數(shù)都要改一遍,這顯然增加了工作成本和錯(cuò)誤出現(xiàn)的幾率,但我們發(fā)現(xiàn)每一項(xiàng)功能都有幾個(gè)共同的屬性,就是smtp地址,smtp用戶,smtp密碼,我們完全可以將這三個(gè)屬性進(jìn)行獨(dú)立,通過(guò)類(lèi)的封裝特性來(lái)實(shí)現(xiàn),即下面的面向?qū)ο笫骄幊獭?/p> 2、面向?qū)ο笫骄幊?/strong> Python當(dāng)中通過(guò)創(chuàng)建類(lèi),就可以很好的實(shí)現(xiàn)面向?qū)ο蟮木幊趟枷?,同樣是上面郵件發(fā)送程序,我們來(lái)用類(lèi)的方式實(shí)現(xiàn)。 我們通過(guò)上述類(lèi)代碼的方式,創(chuàng)建了對(duì)象test_mail,然后調(diào)用它下面的send_mail、recv_mail方法等,這樣的方式使得我們的代碼邏輯更加清晰,如果smtp參數(shù)發(fā)生改變時(shí),我們也僅需要修改對(duì)象實(shí)例化時(shí)的參數(shù)即可。 在實(shí)現(xiàn)簡(jiǎn)單功能時(shí)我們使用函數(shù)式編程,因?yàn)樗銐蚝?jiǎn)單、快速,但隨著程序功能的不斷升級(jí)、提供多個(gè)復(fù)雜邏輯操作時(shí),函數(shù)式變成就顯的不那么好用了,因此針對(duì)不同的代碼場(chǎng)景,我們要用好Python中的編程方式。 Python中類(lèi)的知識(shí)點(diǎn):
|
|