Python 中的列舉
本文將解釋 Python 中的列舉。
YouTube Video
Python 中的列舉
Python 的 enum 是用於定義常量的一種特殊類別,能提高程式的可讀性並有助於防止編碼錯誤。
什麼是 Enum?
Enum(列舉的縮寫)是一種類別,用於定義一組命名的常量。它通常用於將相關的常量分組在一起。例如,它適用於表示顏色、星期幾或方向。
為什麼要使用 Enum?
有幾個原因使您需要使用 Enum。
- 提高可讀性:使用命名常量使程式碼更直觀。
- 防止錯誤:它可以防止常量值被更改或誤用。
- 分組:它將相關的常量組織到一個類別中,表示結構化數據。
Enum 的基本用法
要使用 enum,需要匯入 enum 模組並定義一個類別。該類別應該繼承自 Enum,然後定義需要作為常量的值。
Enum 的基本範例
1from enum import Enum
2
3class Color(Enum):
4 RED = 1
5 GREEN = 2
6 BLUE = 3
7
8# Usage of Enum
9print(Color.RED) # Color.RED
10print(Color.RED.name) # RED
11print(Color.RED.value) # 1在這個範例中,我們定義了一個名為 Color 的 Enum 類別,包含三個值。每個名稱可以通過 name 屬性訪問,其對應的值可以通過 value 屬性訪問。
比較 Enum
Enum 的成員可以通過名稱或值進行比較。可以使用 is 運算符或 == 運算符檢查身份和相等性。
比較範例
1from enum import Enum
2
3class Direction(Enum):
4 NORTH = 1
5 SOUTH = 2
6 EAST = 3
7 WEST = 4
8
9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH) # False
11print(Direction.NORTH == Direction.NORTH) # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH) # False
15print(Direction.NORTH is Direction.NORTH) # True此處展示了使用 == 和 is 比較 Enum 的操作。Enum 設計用於正確比較具有相同名稱和值的物件。
使用 auto() 進行自動值分配
如果您想為 Enum 成員自動分配值,可以使用 enum.auto()。auto() 讓 Python 自動分配值,無需開發者手動指定。
auto() 的示例
1from enum import Enum, auto
2
3class Animal(Enum):
4 DOG = auto()
5 CAT = auto()
6 MOUSE = auto()
7
8# Check the values of Enum
9print(Animal.DOG.value) # 1
10print(Animal.CAT.value) # 2
11print(Animal.MOUSE.value) # 3在此示例中,使用 auto() 消除了明確指定值的需求,使代碼更簡潔。
為 Enum 成員分配多個值
Enum 成員也可以持有多個值,例如元組 (tuple)。這允許每個成員保存額外的相關資訊。
使用元組的示例
1from enum import Enum
2
3class Status(Enum):
4 ACTIVE = (1, 'Active user')
5 INACTIVE = (2, 'Inactive user')
6 SUSPENDED = (3, 'Suspended user')
7
8# Accessing Enum members
9print(Status.ACTIVE.name) # ACTIVE
10print(Status.ACTIVE.value) # (1, 'Active user')
11print(Status.ACTIVE.value[1]) # Active user在此示例中,Status 類的成員每個都有兩個值,分別表示狀態和描述。當您希望將多個信息與一個 Enum 成員相關聯時,這非常有用。
將 Enum 用作旗標 (flags)
Python 的 enum 包含一個 Flag 類,可以像位標誌 (bit flags) 一樣使用。使用 Flag 可讓您組合管理多個狀態。
Flag 的示例
1from enum import Flag, auto
2
3class Permission(Flag):
4 READ = auto()
5 WRITE = auto()
6 EXECUTE = auto()
7
8# Combining flags
9permission = Permission.READ | Permission.WRITE
10print(permission) # Permission.READ|WRITE
11print(Permission.EXECUTE in permission) # False在此示例中,使用位運算操作來組合多個許可權。使用 Flag 讓您能簡潔地管理多個狀態。
使用 Enum 時需要注意的要點
Enum 的不可變性
Enum 成員是不可變的。一旦定義,其名稱或值就不能更改。這是一個保持其作為常數一致性的重要特性。
1from enum import Enum
2
3class Days(Enum):
4 MONDAY = 1
5 TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3 # AttributeError: Cannot reassign members.禁止重複成員
Enum 成員必須具有唯一的名稱和值。即使允許重複的值,Python 也會自動優先考慮第一個成員。
總結
Python 的 enum 模組是一個非常有用的工具,用於組織一組常數、提高可讀性以及保持程式碼一致性。可以有多種用途,從基本使用到使用 auto() 自動分配值,還可以用作位元標誌。
正確理解和掌握 enum 可以提高程式碼質量並幫助防止錯誤。
您可以在我們的 YouTube 頻道上使用 Visual Studio Code 來跟隨上述文章一起學習。 請也查看我們的 YouTube 頻道。