[Python教學]物件導向-Class類的封裝/繼承/多型 - MAX行銷誌
文章推薦指數: 80 %
在上一篇,我們解釋了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__資訊
>>>
必填欄位標示為*留言*顯示名稱*
電子郵件地址*
個人網站網址
在瀏覽器中儲存顯示名稱、電子郵件地址及個人網站網址,以供下次發佈留言時使用。
Δ
搜尋關鍵字:
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
延伸文章資訊
- 1[第11 天] 物件導向(2)Python - iT 邦幫忙
我們在開始討論Python 物件導向之前再看一個熟悉的例子,藉此瞭解屬性與方法是什麼。 屬性與方法. 一個物件(Object)可以包含屬性(Attribute)與方法(Method),我們 ...
- 2給自己的Python小筆記: 物件導向設計OOP教學. 哈囉 - Chwang
給自己的Python小筆記: 物件導向設計OOP教學. 哈囉,今天來跟大家介紹一下物件導向設計OOP,相信大家學程式就算沒用到,也都一定會聽到OOP這個概念,在學習程式的過程 ...
- 39. Class(類別) — Python 3.10.7 說明文件
他混合了C++ 和Modula-3 的class 機制。Python 的class 提供了所有物件導向程式設計(Object Oriented Programming) 的標準特色:class ...
- 4[Python教學]物件導向-Class類的封裝/繼承/多型 - MAX行銷誌
在上一篇,我們解釋了Python 中一切皆為物件,和什麼是物件Object此篇將 ... 此篇將帶大家了解Python 物件導向特性,從最初的Class 類別定義開始、到 ...
- 5Python 入門指南- 單元10 - 物件導向與封裝 - 程式語言教學誌
本篇文章介紹Python 物件導向程式設計的觀念,包括封裝、繼承及多型。 ... 物件導向程式設計(object-oriented programming) 有三大基本特性,分別是 ...