Python 的類別(Class)與物件(Object)

Python 提供了一種概念稱為「 類別(class)」,它讓我們可以創造自己的資料型態來表現複雜的事物。例如我們無法用一個單一的數字、字串或布林值來描述一個人或一台手機,因為它們有太多的屬性:人有年紀、膚色、身高等,手機則有型號、號碼、作業系統、是否防水等。

這時候,我們就可以用 Python 的「類別(class)」來解決這個問題。我們可以自己定義一個新的資料型態,讓這個資料型態包含了我們需要的所有資訊。以下我們以手機為例,定義一個「手機」的類別:

1
2
3
4
5
6
7

class Phone:
def __init__(self, os, model, waterproof):
self.os = os
self.model = model
self.waterproof = waterproof

在這裡,我們定義了一個叫做 Phone 的類別,並且定義了它的初始化函式 __init__ 。這個函式在我們創建新的 Phone 物件時會被調用,並且將物件需要的資訊(在這裡是操作系統、型號、以及是否防水)存入物件中。

self 是一個參照到物件自己的參數。在我們調用 __init__ 函式來初始化物件時,Python 會自動將物件自己傳入給 self。然後,我們就可以用 self 來設定物件的屬性了。例如 self.os = os 就是將物件的操作系統設定為 os。

我們定義好類別之後,就可以用這個類別來創建新的物件了:

1
my_phone = Phone("iOS", "123", True)

在這裡,我們用 Phone 類別創建了一個新的物件,並且將這個物件存入了 my_phone 變數中。這個物件的操作系統是 “iOS”,型號是 “123”,並且是防水的。

1
2
3
print(my_phone.os)
print(my_phone.model)
print(my_phone.waterproof)
1
2
3
# iOS
# 123
# True

方法(Method)

除了屬性之外,我們的類別還可以包含方法(Method)。方法是屬於物件的函式,它可以讓物件進行某些操作。例如,我們可以為我們的手機增加一個撥打電話的方法:

1
2
3
4
5
6
7
8
class Phone:
def __init__(self, os, model, waterproof):
self.os = os
self.model = model
self.waterproof = waterproof

def make_call(self, number):
print(f" 正在撥打電話到 {number}...")

在這裡,我們增加了一個 make_call 方法。這個方法接受一個電話號碼作為參數,並且列印出一條撥打電話的訊息。我們可以這樣使用這個方法:

1
2
my_phone = Phone("iOS", "123", True)
my_phone.make_call("0987654321")

在這裡,我們先創建了一個 Phone 物件並存入 my_phone,然後我們呼叫 my_phone 的 make_call 方法來撥打電話。這時會看到 “正在撥打電話到 0987654321…” 的訊息。


繼承(Inheritance)

Python 的類別也支援繼承,這意味著一個類別可以繼承另一個類別的所有屬性和方法。例如,我們可以創建一個 SmartPhone 類別,它繼承自 Phone 類別並增加一個瀏覽網頁的方法:

1
2
3
class SmartPhone(Phone):
def browse_web(self, url):
print(f" 正在瀏覽 {url}...")

在這裡,SmartPhone 類別繼承自 Phone 類別,所以它有 Phone 類別的所有屬性和方法,同時我們也增加了一個新的 browse_web 方法。我們可以這樣使用這個類別:

1
2
3
my_smart_phone = SmartPhone("Android", "456", True)
my_smart_phone.make_call("0987654321")
my_smart_phone.browse_web("www.example.com")

在這裡,我們先創建了一個 SmartPhone 物件並存入 my_smart_phone,然後我們呼叫 my_smart_phone 的 make_call 和 browse_web 方法。


參考教學影片


作者: 微風