Python 中的列舉

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

在這個範例中,我們定義了一個名為 ColorEnum 類別,包含三個值。每個名稱可以通過 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 頻道。

YouTube Video