類別用來定義物件應該有什麼屬性,還有它能做什麼事情。
物件是由類別創建出來的實例,用來具體的實現某個類別,擁有類別中定義的屬性和方法。簡單來說,類別是概念,而物件是這個概念的具體存在,物件可以儲存數據並執行行為。
物件導向的好處是可以把程式碼模組化,將資料和行為綁定在一起。
首先來看看怎麼定義一個類別,以及如何使用這個類別來創建物件。
class Car
:這裡我們定義了一個名為 Car 的類別,它代表一輛車。__init__ 方法
:這個方法叫做「初始化方法」,創建物件時它會自動執行。這個方法接受 brand 和 color 作為參數,並把它們存到物件的 self 中,這樣每個車子物件都會有自己的品牌和顏色。self
:self 必須存在在每個方法裡,它代表這個物件的屬性或行為。my_car.drive()
:呼叫 drive() 方法,這個方法會告訴我們車子正在行駛中,並輸出車子的顏色和品牌。建立一個簡單的動物園管理系統,在這個系統中,每隻動物都有自己的屬性和行為。
Animal 類別
:創建 Animal 類別,這個類別描述了動物的基本屬性和行為,會有名字 name 和種類 kind 兩個屬性。__init__ 方法
:用這個方法來初始化動物的名字和種類。speak 方法
:這個方法根據動物的種類來判斷它會發出什麼聲音。if 條件是用來根據不同的動物種類輸出不同的叫聲,所以我們要創建三個不同的動物物件,並讓它們執行 speak 方法。有時候希望能夠基於一個類別來創建新的類別,這就是繼承。透過繼承,我們可以讓新的類別擁有舊類別的所有屬性和方法,並且還可以在新的類別裡新增屬性或修改方法。
Dog 類別繼承了 Animal,代表著它擁有 Animal 的所有屬性和方法。但是我們在 Dog 裡重寫了 speak() 方法,讓狗可以發出「汪汪」的叫聲。
多型的意思是不同的物件可以有相同的方法,但每個物件都可以有自己的實現方式,在不同情況下表現出不同的行為。我們把繼承的題目稍微改變一下:
這裡展示的是狗和貓都有 speak() 方法,但它們叫的聲音可以不一樣。
物件導向程式設計對我來說是一個有點熟悉的概念,因為之前學Java時,也會需要用到父子類別繼承,讓整支程式變得更有組織、更容易維護,避免掉了繁複冗雜的程式碼。
而相同的方法能在不同的類別中被調用,可以在繼承後對原本的方法進行小小的更動,增加了原本方法的多變性。雖然繼承來繼承去對我來說還沒有很上手,但經過了一些例題的練習,的確比我初次看到這個概念時還要更加理解。
明天的文章會繼續介紹類別和物件導向,包括比較複雜的多重繼承和type、instance,然後多練習一些小專題來增加熟練度><