1. 程式人生 > >Python面向物件之為何要用類?

Python面向物件之為何要用類?

Python面向物件之為何要用類?

 

對於非程式設計師科班出身的技術人員,理解很多開發思想領域裡面的事情,其實是一件挺痛苦的事情,直到接觸到了Python當中的類,我才明白了什麼是面向物件,更多的理解還是要通過實際的程式碼操練才能夠慢慢的掌握。

今天記錄一下什麼是面向物件,在Python的程式設計世界裡為什麼要用到類。

更多Python視訊、原始碼、資料加群960410445免費獲取

一、面向物件

將大家共有的特性剝離出來進行抽象的過程就是面向物件,這是我對面向物件最直觀的理解,例如我們在工廠生產汽車,每一款車都有自己的生產平臺,試想一下這樣的場景,A款車有100個工人在獨立生產,其中20個人生產底盤,20個人研發發動機,40個人製作車架、車門,20個人負責最終的車輛組裝,B款車同樣有100個人幹著和A款車相同的事情,如果世界是這個樣子,豐田、大眾也早就倒閉了,不管是任何車型,雖然每款車都有自己獨立的生產平臺,但是很多東西一定是具備相同屬性的,例如發動機、方向盤、車座、輪胎,在小到螺絲帽等等,我們可以將這些共有的東西完全獨立出來,變成每款車型的共有屬性,那麼100個工人可能有50個人都是負責公共部分的,節省了人力成本的同時,也節省了資源成本,例如我們要對座椅的尺寸進行調整,那麼僅需要對這50個人的工作內容進行調整即可,而不需要對每款車進行獨立的操作,這就是面向物件為我們帶來的好處。

二、Python中的面向物件——類

簡單的舉例了面向物件的生產場景,我們再通過Python中函數語言程式設計和類程式設計來對比各自的特點。

例如有一個簡單的需求,就是開發一個郵件客戶端程式,可以通過程式,自定義的傳送我們想要傳送的內容。

1、函數語言程式設計

Python面向物件之為何要用類?

 

我們通過上述虛擬碼簡單實現了郵件傳送的需求,但如果想讓更多的人來使用使用這個功能,就會遇到一些問題,例如大家的smtp、使用者口令都不一樣,我們就要改造程式碼變成下面的樣子。

Python面向物件之為何要用類?

 

我們又通過上述方式實現了多人傳送的功能,程式寫到這裡看起來貌似還沒什麼問題,但如果此時我們的程式需求又增加了,例如不只是發郵件了,同時要有接收、刪除、等等功能,我們的程式碼又變成下面的樣子。

Python面向物件之為何要用類?

 

我們看僅一個使用者想要實現三個功能時,就需要寫這麼多程式碼,此時程式碼顯的就有些累贅了,更致命的是如果smtp的地址變了,我要把每個功能函式的傳遞引數都要改一遍,這顯然增加了工作成本和錯誤出現的機率,但我們發現每一項功能都有幾個共同的屬性,就是smtp地址,smtp使用者,smtp密碼,我們完全可以將這三個屬性進行獨立,通過類的封裝特性來實現,即下面的面向物件式程式設計。

2、面向物件式程式設計

Python當中通過建立類,就可以很好的實現面向物件的程式設計思想,同樣是上面郵件傳送程式,我們來用類的方式實現。

Python面向物件之為何要用類?

 

我們通過上述類程式碼的方式,建立了物件test_mail,然後呼叫它下面的send_mail、recv_mail方法等,這樣的方式使得我們的程式碼邏輯更加清晰,如果smtp引數發生改變時,我們也僅需要修改物件例項化時的引數即可。

在實現簡單功能時我們使用函數語言程式設計,因為它足夠簡單、快速,但隨著程式功能的不斷升級、提供多個複雜邏輯操作時,函式式變成就顯的不那麼好用了,因此針對不同的程式碼場景,我們要用好Python中的程式設計方式。

Python中類的知識點:

  • 1、"__init__" 方法為Python中的構造方法,用於初始化我們的類,也就是初始化我們希望的共有屬性,同時構造方法中可以執行該類中其他的函式。
  • 2、self是一個形式引數,為該類的例項化物件,例如 a = My_Class() 中,可以理解a就是self引數。
  • 3、建立物件時,類的後面需要加括號,即完成類的例項化,同時Python會自動查詢該類中的構造方法。
  • 4、類中如果定義了多個功能函式,那麼這些函式可以稱之為該類例項化物件所擁有的方法。
  • 5、面向物件式程式設計的三大特性:封裝、繼承、多型