學過C++或Java的同學一定了解過物件導向的相關內容,程式語言一般分為兩種設計方式:物件導向、面向過程,早期的程式語言多是面向過程的,由多個過程組合在一起,而Python在設計的時候就是一種物件導向的語言,因此在Python是物件導向的程式語言。本節我們先來了解物件導向程式設計的概念。
首先我們要學習什麼是對象,對象的英文是'Object',我們的生活中到處都是對象,你面前的電腦、手中的手機或者是書架上的書等等都是對象,對像是一種實際存在的實體。
我們在學習物件的時候可以把物件看成兩個部分,一部分稱為屬性,一部分稱為行為。
例如:我們買了一個鬧鐘,鬧鐘的材質是它的屬性,當鬧鐘響起的時候是它的行為。
我們在前面學習過的資料類型都屬於類,類別是Python的基本構造,在類別中包含很多方法,我們在學習類別的時候可以把類別理解為一個教室,當我們創建了一個教室的時候,我們規定這個教室需要學習語文、數學和英語,當一個學生加入這個班級,就需要學習這三門科目,類往往是我們定義的一個載體,類中的成員會具有相同的屬性和行為。
我們可以把所有汽車看成一個類,也可以把所有飛機看成一個類,類是一種比較抽象的概念,我們在定義的時候要根據實際情況來定義。
物件導向程式設計有三大特點:封裝、繼承、多型。
關於封裝,我們可以舉生活中的例子來學習一下,首先我們先從字面意思思考一下,封裝就是把東西封了起來,當我們買了一台音響,音箱內部存在電路板、線路等結構,而我們使用者不需要去知道他的內部結構和使用原理,所以這些結構被封閉在箱體內部,在箱體外提供一些介面供我們連接,這些在音箱內部的屬於封裝起來的東西。
我們在寫程式的時候也可以採用封裝的理念,對於某些內容我們不提供介面來使用它們,它們屬於內部的構造,屬於不可變的內容,這種內容即為封裝。
提到繼承,大家一般都會聯想到遺產,我們如果拿遺產來形容繼承的話,在現實生活中的遺產繼承一般是單對單的,如果是單對多的形式,那麼多人獲取到的遺產很有可能是不一致的,而我們在程式裡的繼承是一種完全繼承的關係。
我們可以把車看為一個對象,然後不管是賓士車還是寶馬車又或者是大眾車,這些車都繼承了車的全部屬性和行為。我們把車看成一個類,給車定義了在地面駕駛和4個輪胎的屬性,那麼當寶馬車來繼承這個類,寶馬車就獲得了在地面駕駛和4個輪胎的屬性,如果我們給車定義了高速行駛的行為,那麼BMW車也繼承了它高速行駛的行為。
我們在使用繼承關係的時候,我們把車稱為'超類別'或'父類別',而繼承而來的寶馬車稱為'子類別'或'派生類別'。
多態就是一個父類有多個屬性,根據這些屬性而衍生了多個子類,我們繼續拿車來舉例,我們可以給車定義兩個屬性,一個在馬路上行駛,一個是在軌道上行駛,而這兩種屬性又都包括可載人,那麼我們在定義子類的繼承的時候,就可以定義了兩種子類,一種是可載人的但在馬路上行駛的汽車,一種是可載人但在軌道上形式的汽車,這種一個類衍生出多個子類,他們有公共屬性也有私有屬性的方式稱為多態。
關於類別和物件這兩種概念,在我們學習程式設計的時候至關重要,不管是電腦的任何產業,一定離不開類別和物件的使用,多使用生活中的例子去思考一下什麼是類別和對象,下一節我們來學習類別的定義和使用。