[Python物件導向]淺談Python類別(Class) - Learn Code With Mike
文章推薦指數: 80 %
簡單來說,就是物件(Object)的藍圖(blueprint)。
就像要生產一部汽車時,都會有設計圖,藉此可以知道此類汽車會有哪些特性及功能,類別 ...
跳到主要內容
[Python物件導向]淺談Python類別(Class)
1月02,2020
PhotobyBramNausonUnsplash
在學習程式語言時,或多或少都有聽過物件導向程式設計(Object-oriented
programming,簡稱OOP),它是一個具有物件(Object)概念的開發方式,能夠提高軟體的重用性、擴充性及維護性,在開發大型的應用程式時更是被廣為使用,所以在現今多數的程式語言都有此種開發方式,Python當然也不例外。
而要使用物件導向程式設計就必須對類別(Class)及物件(Object)等有一些基本的了解,包含了:
類別(Class)
物件(Object)
屬性(Attribute)
建構式(Constructor)
方法(Method)
我們先來看一下今天要來建立的類別:
#汽車類別
classCars:
#建構式
def__init__(self,color,seat):
self.color=color#顏色屬性
self.seat=seat#座位屬性
#方法(Method)
defdrive(self):
print(f"Mycaris{self.color}and{self.seat}seats.")
接下來就針對類別(Class)各個部分來進行介紹。
一、類別(Class)
簡單來說,就是物件(Object)的藍圖(blueprint)。
就像要生產一部汽車時,都會有設計圖,藉此可以知道此類汽車會有哪些特性及功能,類別(Class)就類似設計圖,會定義未來產生物件(Object)時所擁有的屬性(Attribute)及方法(Method)。
而定義類別的語法如下:
classclassname:
statement
首先會有class關鍵字,接著自定類別名稱,最後加上冒號。
類別名稱的命名原則習慣上使用Pascal命名法,也就是每個單字字首大寫,不得使用空白或底線分隔單字,如下範例:
#範例一
classCars:
#範例二
classMyCars:
二、物件(Object)
就是透過類別(Class)實際建立的實體,就像實際生產出來的汽車(例如:Mazda)。
類別(Class)與物件(Object)的關係就像汽車設計圖與汽車實體。
而建立物件(Object)的語法如下:
object_name=classname()
範例:
mazda=Cars()
範例中的mazda即是Cars類別(Class)的物件(Object)。
Python也提供了一個函式isinstance()來判斷類別(Class)與物件(Object)的關係,語法如下:
isinstance(object_name,class_name)
範例:
#汽車類別
classCars:
pass
#摩托車類別
classMotorcycle:
pass
#建立Cars類別的物件
mazda=Cars()
print(isinstance(mazda,Cars))#執行結果:True
print(isinstance(mazda,Motorcycle))#執行結果:False
第15行由於mazda並不是Motorcycle的物件(Object),所以執行結果為False。
三、屬性(Attribute)
負責存放物件(Object)的資料。
設定物件(Object)的屬性值語法如下:
object_name.attribute_name=value
範例:
mazda=Cars()#建立Cars類別的物件
mazda.color="blue"#顏色屬性
mazda.seat=4#座位屬性
從範例中可以看到,建立物件(Object)後,才可進行屬性值(Attribute)的設定。
但是這種寫法當有很多屬性需進行設定時,會顯得沒有效率,所以會建議使用建構式(Constructor)來進行屬性值(Attribute)的設定,於文章第四節會來跟大家說明。
而存取物件的屬性值則透過以下語法:
object_name.attribute_name
範例:
print(mazda.color)#執行結果:blue
print(mazda.seat)#執行結果:4
四、建構式(Constructor)
於建立物件(Object)的同時,會自動執行的方法(Method)。
所以通常我們會在建構式(Constructor)中初始化物件(Object)的屬性值(Attribute)。
至少要有一個self參數,之後利用逗號區隔其他屬性,語法如下:
#建構式
def__init__(self,color,seat):
self.color=color#顏色屬性
self.seat=seat#座位屬性
而這個self是什麼意思呢?它代表了實體物件的參考,也就是目前的物件(Object)。
這個self就是告訴類別(Class)目前是在設定哪一個物件的屬性(Attribute)。
所以範例中的意思就是此物件的color屬性等於傳入的color屬性值,此物件的seat屬性等於傳入的seat屬性值,而傳入屬性值的方式就是在建立物件的時候,如下範例:
#汽車類別
classCars:
#建構式
def__init__(self,color,seat):
self.color=color#顏色屬性
self.seat=seat#座位屬性
mazda=Cars("blue",4)
範例中於建立mazda物件(Object)的同時,生成其屬性並且初始化屬性值(color和seat)。
你一定會想說奇怪,建構式(Constructor)的參數有三個,為什麼我們只有傳入兩個?因為第一個self參數,Python編譯器會幫我們把目前物件的參考(mazda)傳給建構式(Constructor),所以我們就不需要多此一舉傳入物件。
五、方法(Method)
可以想像是物件(Object)的行為。
定義方法(Method)和函式(Function)的語法很像,都是def關鍵字開頭,接著自訂名稱,但是方法(Method)和建構式(Constructor)一樣至少要有一個self參數,語法如下:
defmethod_name(self):
statement
範例:
#汽車類別
classCars:
#建構式
def__init__(self,color,seat):
self.color=color#顏色屬性
self.seat=seat#座位屬性
#方法(Method)
defdrive(self):
print(f"Mycaris{self.color}andhas{self.seat}seats.")
mazda=Cars("blue",4)
mazda.drive()#執行結果:Mycarisblueandhas4seats.
方法(Method)的self參數同樣是代表目前的物件(mazda),在呼叫時Python編譯器會自動幫我們傳入。
方法(Method)中透過self.color及self.seat的方式來存取目前物件(mazda)的color和seat屬性值,並且印出結果。
六、小結
以上就是Python類別(Class)的基本觀念介紹,希望透過此文章,可以大致瞭解整個Python類別(Class)的架構,並且有能力建立屬於自己的類別(Class)。
當然其中的屬性(Attribute)又可分為:
實體屬性(InstanceAttribute)
類別屬性(ClassAttribute)
而方法(Method)也可分為:
實體方法(Instance Method)
類別方法(ClassMethod)
靜態方法(StaticMethod)
未來將會各別撰寫相關文章來詳細介紹。
在練習的過程中若有碰到任何問題或說明不清楚的地方,歡迎留言與我分享!
如果您喜歡我的文章,請幫我按五下Like(使用Google或Facebook帳號免費註冊),支持我創作教學文章,回饋由LikeCoin基金會出資,完全不會花到錢,感謝大家。
有想要看的教學內容嗎?歡迎利用以下的Google表單讓我知道,將有機會成為教學文章,分享給大家😊https://forms.gle/UW8u9XddoY17HjaSA你可能感興趣的文章
PythonLambdaFunction應用技巧分享
五個必知的PythonFunction觀念整理
PythonUnpacking實用技巧分享
Python字串介紹
Python數值與型別轉換
Python學習資源整理
分享
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
標籤
Python物件導向
標籤:
Python物件導向
分享
取得連結
Facebook
Twitter
Pinterest
以電子郵件傳送
其他應用程式
留言
andyy2020年1月4日上午10:31我看完這篇終於理解,簡單明瞭,越來越喜歡您的文章,加油~~回覆刪除回覆MikeKu2020年1月8日晚上11:52感謝您的支持:)刪除回覆回覆回覆甘草2020年1月8日下午3:49請問一下第五節第二個範例裡print(f"Mycaris{self.color}andhas{self.seat}seats.")那個f的意思是...?最後感謝老師的文章非常好理解!!回覆刪除回覆MikeKu2020年1月8日晚上11:53Python的format-string(字串格式化)用法,可以參考我寫的「Python字串介紹」文章第二節的字串格式化。
文章連結有附在本文的「你可能有興趣的文章」中。
感謝您的支持:)刪除回覆回覆回覆Ray2020年10月11日下午2:49請問在建構式中,_init_是什麼意思?可以用Cars取代嗎?def_init_(self,color,seat):回覆刪除回覆MikeKu2020年10月11日晚上9:10Ray您好:不能像其它的程式語言一樣使用和類別同名的方式來定義Python建構式,也就是不能使用Cars取代,__init__就是Python程式語言中,建構式的定義方式,用來初始化物件的狀態。
希望以上有解答您的疑問:)刪除回覆回覆回覆馬可高2020年11月5日中午12:49看過很多的網頁,您的教學字體清楚、範例簡潔,造福了我們這些程式新手,跟之前我入手python看澎澎老師的影片一樣,都是很好的教學內容,期望能有更多的內容能分享給我們,加油!!回覆刪除回覆MikeKu2020年11月7日下午2:22馬可高您好:真的非常感謝您的鼓勵與支持,會持續撰寫教學文章分享給大家的,期望這樣的內容能幫助到正在學習的讀者們,謝謝您:)刪除回覆回覆回覆1等蔬菜熊2020年12月29日下午4:05感謝教學對於菜逼吧的本人是一大福音期待出來更多好作品p.s.我的問題剛好樓上上上有人問了就純發感謝瞜回覆刪除回覆MikeKu2020年12月29日晚上9:12不用客氣,也謝謝您的支持,未來會持續分享好文給大家的:)刪除回覆回覆回覆ytma2021年1月18日上午11:21看了你教學才分清楚物件與類別的關係,比市面上的python中譯本好太多了.小弟目前python菜雞,希望有朝一日能學成對付那些海量的資料回覆刪除回覆MikeKu2021年1月18日晚上9:15ytma您好,感謝您的支持鼓勵,一定可以學成的,一起加油吧:)刪除回覆回覆回覆Unknown2021年1月26日下午5:05您好,我想請問一下,封包和類別的差異,感覺類別能做到,封包也能做,所以想了解一下差異,謝謝回覆刪除回覆MikeKu2021年1月26日晚上10:19您好,請問是想瞭解「封裝」和「類別」的差異嗎?簡單來說,「封裝」可以想像成是「類別」中,用來控制屬性或方法的權限,什麼樣的屬性或方法要對外開放,什麼樣的屬性或方法不對外開放,來達到「類別」中,屬性或方法的存取控制。
「封裝」的相關概念可以參考以下文章:https://www.learncodewithmike.com/2020/01/python-encapsulation.html希望有解答您的疑惑:)刪除回覆回覆Unknown2021年1月27日下午3:48謝謝您👍刪除回覆回覆回覆pocketman2021年2月2日上午9:25真的很棒!回覆刪除回覆MikeKu2021年2月2日晚上9:37pocketman您好,感謝支持鼓勵阿:)刪除回覆回覆回覆匿名2021年2月28日晚上9:52網路上搜尋class的說明,被各種名詞弄得越看越頭昏,結果看到你的說明簡潔、具體、易懂,真是太棒了!非常感謝你!回覆刪除回覆MikeKu2021年3月5日晚上8:35您好,感謝您的鼓勵,非常開心能夠幫助到您,讓我有動力繼續分享更多的教學給大家,歡迎分享給身邊有在學習Python朋友唷:)刪除回覆回覆回覆Unknown2021年5月22日下午1:53非常感謝回覆刪除回覆回覆Rango2021年6月14日上午10:39非常清楚!!!回覆刪除回覆回覆GritGirl2021年6月25日下午3:02謝謝您簡潔、具體、易懂的說明!對初學者來說真的是救星!網路上太多的文章的用字遣詞都太艱深>
延伸文章資訊
- 1Day 11 淺談物件導向(一):class與method - iT 邦幫忙
物件導向對於初學者來說可能是個較容易混淆的概念。 要搞懂物件導向,首先要釐清類別(class)、屬性(property)、方法(method)、實體(instance)之間的差別及用法。
- 2類別、物件- Java備忘筆記 - GitBook
類別定義物件的屬性、方法,利用類別可以產生物件。 · 物件有它所屬的屬性及方法,在記憶體佔有空間,物件導向的概念就是把真實世界抽象化為許多的物件,物件之間彼此會交互 ...
- 3物件導向基礎:何謂類別(Class)?何謂物件(Object)? 分享
類別算是一個藍圖、一個範本、一個可參考的文件,他沒有實體(Instance) 的概念,屬靜態的。 · 物件是一個看的到、摸的到的實體,屬於動態的,狀態會隨時 ...
- 4[Python物件導向]淺談Python類別(Class) - Learn Code With Mike
簡單來說,就是物件(Object)的藍圖(blueprint)。就像要生產一部汽車時,都會有設計圖,藉此可以知道此類汽車會有哪些特性及功能,類別 ...
- 5第七章物件導向設計: 類別與物件
已經使用過某些Java類別庫的類別或物件(例如:Math類別、String物件. ),但卻未曾學習如何建立一個物件(事實上建立物件必須先宣告類別)。