標籤: 程式設計

圖片來源:Photo by Kelly Sikkema on Unsplash
按下訂閱鈕透過電子郵件收到我的文章🎉
什麼是物件導向
我們常聽到對 Python 程式語言的描述可能會有直譯(Interpreted)、高階(High-level)、泛用(General-purposed)或者物件導向(Object-oriented),其中最息息相關、也最容易讓人困惑的,大概會是「物件導向」這個描述。
其中原因可能是資料分析師在使用 Python 程式語言的時候多半是採取順序型態(Procedural),我們可以將順序型態的寫作方式想像成定義多個關聯函式,這些函式在定義完成之後,可以依序呼叫將資料從輸入轉變成為輸出;順序型態的程式設計恰巧也與 Jupyter Notebook 的操作:從最上方的儲存格開始執行到最下方的儲存格不謀而合,因此廣為資料分析師所熟稔並不是太意外的一件事。
那麼,物件導向與順序型態的差別在哪裡呢?
物件導向程式設計四大支柱
具體來說,物件導向程式設計可以讓程式碼實現四個特殊性質,俗稱四大支柱(Four-pillars of object-oriented programming):
封裝(Encapsulation);
繼承(Inheritance);
抽象(Abstraction);
多型(Polymorphism)。
讓我們接續前篇文章談第二個支柱:繼承。
什麼是繼承
繼承(Inheritance)在物件導向程式設計中是用來讓先前定義好的類別(Class)得以延展功能的機制,透過繼承,新定義的類別可以完全沿襲所繼承類別的成員屬性(Attributes)與成員方法(Methods),這樣的機制可以有效解決程式碼的重複性問題,並且實踐軟體工程的 DRY(Don’t Repeat Yourself) 哲學。
在 Python 繼承的語法相當簡潔,只需要在新定義類別的名稱後在小括號內代入已定義好的類別即可:
class NewClass(OriginalClass):
# ...
舉例來說,定義好的類別 SimpleCalculator
具有加減乘除這四個成員方法以及一個自然數 e
成員屬性;繼承了 SimpleCalculator
的 AdvancedCalculator
類別在什麼事都不做的情況下(像是僅傳入一個 pass
保留字)就具備了四個成員方法以及一個成員屬性:
Class AdvancedCalculator(SimpleCalculator):
pass # do nothing
ac = AdvancedCalculator()
# Call member methods and attributes of ac
# ...
如此一來在新定義的類別中添加方法,就可以引用繼承而來的成員方法以及成員屬性,達到功能延展並且不需要重新造輪。
專案簡介
在這個專案中,我們打算使用 Python 定義兩個類別:分別是 SimpleCalculator
與 AdvancedCalculator
;其中 SimpleCalculator
類別具有四個成員方法以及一個成員屬性;AdvancedCalculator
類別繼承了 SimpleCalculator
類別並新增一個方法。透過這個專案,我們能夠暸解何謂物件導向的第二支柱:繼承。
點選連結在瀏覽器開啟互動 Jupyter Notebook 查看完整程式碼以及細節:https://mybinder.org/v2/gh/datainpoint/project-oop-inheritance/master?filepath=project-oop-inheritance.ipynb
想暸解哪些主題,留言跟我說👇