什麼是類別

類別是一種自訂資料型態,如同int, str等資料型態
所有關於該資料型態的操作都能自行決定

類別 -> 物件

物件是基於類別創建出來的實際成品

類別 物件
str “Hello world!”
int 114514
list [1, 2, 3]

可想像類別是模板或一種資料型態,創建完不會發生任何事
需要使用類別來創建一個物件才可以用

屬性與方法

屬性與方法是類別專屬的功能
可以想像成類別自己擁有的變數和函數

語法

此處以車輛生產或使用為情境
通常類別的名稱字首會大寫,如Car, Model等

基本類別

1
2
3
4
5
6
7
8
9
class Car:
def __init__(self, 輸入品牌, 輸入型號): # self代表取用自己的意思
self.brand = 輸入品牌 # 讓自己的brand屬性成為傳進來的品牌變數
self.model = 輸入型號 # 讓自己的model屬性成為傳進來的型號變數

def display_info(self):
print(f"This car is a {self.brand} {self.model}")

mycar = Car("Toyota", "Yaris")

屬性

def __init__()是一個特殊初始化的函數
在類別被呼叫變成一個物件的時候會執行
可以利用這個函數來動態決定創建的物件有什麼屬性

此處接受輸入品牌與型號
在初始化函數時,自身的brandmodel被賦予了輸入的值

self的就是自己的意思,如果需要在一個物件內取用關於自己的資訊,就需要用self
此處由於我們修改了自己的屬性,有取用到關於自己的資訊

方法

此處我們定義了一個方法display_info(),可以取用自己的屬性,然後組合成字串印出來

實際使用

1
2
3
4
5
print(mycar.brand) # Toyota

print(mycar.model) # Yaris

mycar.display_info() # This car is a Toyota Yaris

可看出取用物件內的資料,方法是

  1. 先指定哪一個物件
  2. .代表取用內部
  3. 內部屬性或方法
    其實並不複雜,跟一般取用變數或函數一樣的概念

進階: 繼承

可以讓新的類別模板擁有舊模板的內容,同時也擁有自己的新內容

1
2
3
4
5
6
7
8
class ElectricCar(Car): # 定義時加上(舊類別)來繼承
def __init__(self, brand, model, battery):
super().__init__(brand, model)
self.battery = battery

def display_info(self):
super().display_info()
print(f"Battery: {self.battery}")

父類別

被繼承的類別稱為父類別,繼承的稱為子類別
super()可以取用父類別的內容
為了避免太專業化,以下僅稱「舊的」

舊類別的取用

新的類別會覆蓋掉舊類別的同名屬性與方法
在這裡,我們對電動車額外新增了一個__init__()
如果要設定品牌和型號,需要舊類別的初始化,但在這裡會被覆蓋掉

所以我們使用super().__init__(brand, model)
去取用舊類別的初始化來處理這兩個參數

下方的display_info()的概念也一樣,你做了一個新的同名函式之後,舊的並不會生效,需要你去特別調用

上課簡報

可能需等待字體與內容載入

可憐的高中生🤯 設計的 Python 類別