在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python
當然也不例外。而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解。其中class
通常與def
一起出現。
簡單來說,就是物件(Object)的藍圖(blueprint)。就像要生產一部汽車時,都會有設計圖,藉此可以知道此類汽車會有哪些特性及功能,類別(Class)就類似設計圖,會定義未來產生物件(Object)時所擁有的屬性(Attribute)及方法(Method)。
而定義類別的語法如下:
依照命名方式,一般會讓每個單字的字首大寫表示,且不得使用底線**_**或是空白分隔單字。 範例如下:
就是透過類別(Class)實際建立的實體,就像實際生產出來的汽車(例如:Mazda)。類別(Class)與物件(Object)的關係就像汽車設計圖與汽車實體。而建立物件(Object)的語法如下:
這邊設計一個簡單範例:
輸出結果
於建立物件(Object)的同時,會自動執行的方法(Method)。所以通常我們會在建構式(Constructor)中初始化物件(Object)的屬性值(Attribute)。至少要有一個self參數,之後利用逗號區隔其他屬性,語法如下:
而這個self是什麼意思呢?
它代表了實體物件的參考,也就是目前的物件(Object)。這個self就是告訴類別(Class)目前是在設定哪一個物件的屬性(Attribute)。所以範例中的意思就是此物件的cpu
屬性等於傳入的cpu_name
屬性值,此物件的displaysize
屬性等於傳入的display_inch
屬性值,而傳入屬性值的方式就是在建立物件的時候,如下範例:
負責存放物件(Object)的資料。設定物件(Object)的屬性值語法如下:
套用前面的範例可以得知
執行結果
可以想像是物件(Object)的行為。定義方法(Method)和函式(Function)的語法很像,都是def關鍵字開頭,接著自訂名稱,但是方法(Method)和建構式(Constructor)一樣至少要有一個self參數,語法如下:
簡單來說,任何你希望這個程式做的事情,都可以放在方法這個位置,讓物件導向幫你完成想做的事情。
繼承(Inheritance)顧名思義,就是會有父類別(或稱基底類別Base Class)及子類別(Sub Class)的階層關係。子類別會擁有父類別公開的屬性(Attribute)及方法(Method)。 所以Python繼承(Inheritance)的概念就是將各類別(Class)會共同使用的屬性(Attribute)或方法(Method)放在一個獨立的類別(Class)中,其它的類別(Class)透過繼承(Inheritance)的方式來擁有,降低程式碼的重複性。
先來看一段程式碼
執行結果
但是,一段程式碼重複部份如此之多,這邊應該針對內容進行精簡化。因此有了繼承(inheritance),利用繼承語法將父類別使得相同的方法可以不用在做一次,也使得未來維護程式碼時較為簡單。
範例如下:
執行結果