[Python物件導向]淺談Python類別(Class) - Learn Code With Mike

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

簡單來說,就是物件(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謝謝您簡潔、具體、易懂的說明!對初學者來說真的是救星!網路上太多的文章的用字遣詞都太艱深>



請為這篇文章評分?