[Python教學]物件導向-Class類的封裝/繼承/多型 - MAX行銷誌

文章推薦指數: 80 %
投票人數:10人

在上一篇,我們解釋了Python 中一切皆為物件,和什麼是物件Object此篇將 ... 此篇將帶大家了解Python 物件導向特性,從最初的Class 類別定義開始、到 ... 跳至主要內容 在上一篇,我們解釋了Python中一切皆為物件,和什麼是物件Object此篇將帶大家了解Python物件導向特性,從最初的Class類別定義開始、到物件導向的三大核心特性:繼承、封裝和多型,都有詳細的筆記和解釋教學。

 ▍為什麼要學習物件導向設計原因: 使程式碼的維護和擴充更容易使人更容易閱讀理解程式碼邏輯  ▍本篇大綱 首先用Class來定義類別OOP特性一.繼承(inheritance)OOP特性二.封裝(encapsulation)OOP特性三.多型(polymorphism)補充:類的其他呼叫方式 文章目錄 首先用Class來定義類別特性一.繼承(inheritance)特性二.封裝(encapsulation)特性三.多型(polymorphism)補充:類的其他呼叫方式 首先用Class來定義類別 在物件導向中,類別是所有共同物件成員的抽象描述,它定義該類別物件共同具有的屬性,及實現該物件的方法。

Python建立class,通常類名採用大寫(下面範例為Employee),在類中可以定義屬性和方法。

以下為簡單的class類範例:1.self.working_hour=0為定義屬性2.defwork(self):為定義方法 classEmployee: def__init__(self): self.working_hour=0#屬性 defwork(self):#方法 self.working_hour+=1 print(‘Working:’,working_hour) andy=Employee()#類的實例化 andy.work()#呼叫類的方法 print(andy.working_hour)#呼叫類的屬性 ▍Pythonclass自由度很高,定義屬性的三種方法 classThisTestClass: getName='Max'#方法一:把屬性定義寫在init外面 def__init__(self): self.getNameFromInit=‘Max__init__’#方法二:把屬性定義寫在init內 pass if__name__==“__main__”: task=ThisTestClass() task.sendName=‘Max_sendName’##方法三:自己給屬性與參數 print(task.getName) print(task.getNameFromInit) print(task.sendName) >>>Max >>>Max__init__ >>>Max_sendName ▍物件導向有三大基本特性,分別是: 封裝(encapsulation)繼承(inheritance)多型(polymorphism) 特性一.繼承(inheritance) ▍簡單來說:繼承就像是生活中,子女繼承父母的財產一樣。

實作class繼承範例:首先Employee是這次的父親,而Andy是繼承Employee的孩子 程式範例第四行classAndy(Employee),這邊讓Andy繼承Employee物件程式範例第六行super().init(),這邊super是呼叫父類別的語法,所以繼承了父親的能力程式範例第十行print(‘tree:’,self.cut_tree),繼承後即可調用父親能力 而如果子類有與父類擁有同名的函式,則子類會會覆蓋掉父類的函式。

classEmployee: def__init__(self): self.cut_tree=3 classAndy(Employee): def__init__(self,get_gold): super().__init__() self.get_gold=get_gold defgetDetials(self): print('==getDetals==') print('tree:',self.cut_tree) print('gold:',self.get_gold) if__name__=="__main__": andy=Andy(1) andy.getDetials() >>>tree:3 >>>gold:1 特性二.封裝(encapsulation) ▍簡單來說:隱藏程式實現細節只保留下接口,使程式容易模組化。

封裝從字面上理解就是包裝的意思,像是手機,從開機、打電話到上網我們都都不知道背後具題實現細節,但只需要按下按鈕就可以完成,這功能就是封裝。

以下範例work()就是封裝的表現,可以讓外部使用者不需考慮內部實作而直接呼叫使用。

若是有不想被呼叫的變數,直接在前面加上__像是__sleep即可以成為私有變數,如果使用者呼叫__sleep時則會噴objecthasnoattribute的錯誤。

classEmployee: def__init__(self): self.cut_tree=3 defwork(self): print(‘Working’) def__sleep(self): print(‘Sleeping’) if__name__==“__main__”: Andy=Employee() andy.work() >>>Working andy.__sleep() >>>AttributeError:‘Employee’objecthasnoattribute‘__sleep’ 特性三.多型(polymorphism) ▍簡單來說:呼叫同名的方法時,會得到不同的結果。

如下範例Employee、Andy和Joy類別都同時擁有work的方法,但呼叫w.work()、w1.work()、w2.work()時卻有各自的表現形態。

Python會根據呼叫的類別來決定要執行哪個方法實作,這就是多型的意思。

classEmployee: defwork(self): print(‘Employeework’) classAndy(Employee): defwork(self): print(‘Andywork’) classJoy(Employee): defwork(self): print(‘Joywork’) w=Employee() w1=Andy() w2=Joy() w.work() w1.work() w2.work() >>>Employeework >>>Andywork >>>Joywork 補充:類的其他呼叫方式 classEmployee: ‘’’這是__doc__資訊''' defwork(self): print(‘Employeework’) w=Employee() print(w.__doc__) print(w.__class__) print(Employee.__dict__) >>>這是__doc__資訊 >>> >>>{‘__module__’:‘__main__’,‘__doc__’:’這是__doc__資訊’,‘work’:,‘__dict__’:,‘__weakref__’:} [Python教學]物件導向-Class類的封裝/繼承/多型結束囉,感謝收看! 關於OOP物件導向教學的延伸閱讀: ▍本站的其他相關教學: [Python教學]一切皆為物件,到底什麼是物件Object?[Python教學]物件導向–Class類的封裝/繼承/多型[Python教學]Class/Static/AbstractMethod初探[Python教學]@property是什麼?使用場景和用法介紹[Python教學]裝飾詞原理到應用 ▍其他相關教學: 1.[Python環境設置]有一個乾淨的Python環境很重要,推薦你試試看virtualenv和pyenv打造乾淨的環境:[Python教學]使用pyenv和virtualenv打造Python環境配置 2.[Git入門教學]Git總是學了又忘?整理了Git入門四步驟,Git時光機(退版或版本切換),和如何優雅的寫好GitCommit,這篇推薦給你:[Git教學]初心者懶人包Git入門 3.[爬蟲+數據分析]爬蟲不知道要爬什麼嗎?筆者寫了蝦皮爬蟲和整理成競品賣家分析報告,想找靈感可以看看:[非同步爬蟲]蝦皮賣家爬蟲GitHub分享[數據分析]蝦皮賣家競品分析報告 4.[Flask教學]想試試看Python架設網站嗎?筆者整理了Flask學習路線圖,共30篇文章組成,有興趣可以收藏:[Flask教學]Flask學習路線圖 5.[VSCode推薦]寫程式有一個好用方便上手的IDE編輯器很重要,列出了筆者常用的5個擴充套件,推薦給你試試:VisualStudioCode必備的5個擴充和小常識 有關Max行銷誌的最新文章,都會發佈在Max的Facebook粉絲專頁,如果想看最新更新,還請您按讚或是追蹤唷! 文章導覽 [GTM教學]什麼是GTM環境變數(Environmentname)[Python教學]@property是什麼?使用場景和用法介紹 發佈留言取消回覆發佈留言必須填寫的電子郵件地址不會公開。

必填欄位標示為*留言*顯示名稱* 電子郵件地址* 個人網站網址 在瀏覽器中儲存顯示名稱、電子郵件地址及個人網站網址,以供下次發佈留言時使用。

Δ 搜尋關鍵字: CategoryTags Allposts(140) Crypto(6) DataStudio教學(8) Git教學(8) GoogleTagManager教學(9) PythonDjango教學(3) PythonFlask教學(36) Python基礎教學(23) Python數據分析(21) Python機器學習(4) Python爬蟲教學(15) Python資料庫教學(11) Swift教學(5) LatestPost 效能指標Accuracy,Recall,Precision,F-score [DataAnalytics]HDBRentalPriceinSingapore 【Git教學】超輕鬆gitconfig設定指南 Python環境管理,讓poetry幫你建立虛擬環境 [Python教學]如何切換Python版本,讓Pyenv幫你輕鬆管理版本 ListList 選取月份 2022年9月 (1) 2022年8月 (1) 2022年5月 (4) 2022年4月 (1) 2022年3月 (1) 2022年2月 (1) 2022年1月 (2) 2021年12月 (2) 2021年11月 (1) 2021年10月 (1) 2021年9月 (1) 2021年8月 (1) 2021年7月 (1) 2021年6月 (1) 2021年5月 (1) 2021年4月 (1) 2021年3月 (3) 2021年2月 (1) 2021年1月 (3) 2020年12月 (2) 2020年11月 (2) 2020年10月 (3) 2020年9月 (1) 2020年8月 (5) 2020年7月 (3) 2020年6月 (5) 2020年5月 (11) 2020年4月 (6) 2020年3月 (6) 2020年2月 (1) 2020年1月 (3) 2019年12月 (5) 2019年11月 (5) 2019年10月 (1) 2019年9月 (4) 2019年8月 (2) 2019年7月 (2) 2019年6月 (3) 2019年5月 (1) 2019年4月 (6) 2019年3月 (3) 2019年2月 (1) 2019年1月 (2) 2018年12月 (1) 2018年11月 (10) 2018年10月 (5) 2018年9月 (6) 2018年8月 (1) 2018年7月 (1) 2018年6月 (2) 2018年5月 (2) 2018年4月 (1) 2018年2月 (1) 2018年1月 (1) Comment「高藥師」於〈[資料庫筆記]Python串接GoogleSheet新增、讀取、更新和刪除〉發佈留言「Claudia」於〈[零基礎上手]Discord自動發言機器人〉發佈留言「Max」於〈[零基礎上手]Discord自動發言機器人〉發佈留言「Claudia」於〈[零基礎上手]Discord自動發言機器人〉發佈留言「han」於〈[零基礎上手]Discord自動參加抽獎機器人(雲端穩定版)〉發佈留言 About Explore



請為這篇文章評分?