Python 枚举类
枚举类(Enum)是 Python 中用于定义一组固定常量的数据类型,适合表示有限的、离散的值集合。Python 的 enum 模块提供了创建枚举类的支持,增强了代码的可读性和类型安全性。
定义枚举类
使用 enum
模块的 Enum
类来定义枚举。每个枚举成员是一个常量,通常使用大写字母命名。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
每个成员(如 Color.RED
)具有名称(name
)和值(value
)。
Color.RED.name
返回'RED'
Color.RED.value
返回1
。
使用枚举类
访问枚举成员
可以通过点号访问枚举成员,或者通过值或名称查找。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# 访问成员
print(Color.RED) # 输出: Color.RED
print(Color.RED.value) # 输出: 1
print(Color['RED']) # 输出: Color.RED
print(Color(1)) # 输出: Color.RED
迭代和比较
枚举类支持迭代和比较操作。比较时,枚举成员只与同一枚举类的成员比较。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# 迭代
for color in Color:
print(color) # 输出: Color.RED, Color.GREEN, Color.BLUE
# 比较
print(Color.RED == Color.RED) # 输出: True
print(Color.RED == Color.GREEN) # 输出: False
实际应用
枚举常用于定义状态、选项等。例如,定义一周的日子:
from enum import Enum
class Weekday(Enum):
MONDAY = 1
TUESDAY = 2
WEDNESDAY = 3
THURSDAY = 4
FRIDAY = 5
SATURDAY = 6
SUNDAY = 7
def is_weekend(day):
return day in (Weekday.SATURDAY, Weekday.SUNDAY)
print(is_weekend(Weekday.SATURDAY)) # 输出: True
print(is_weekend(Weekday.MONDAY)) # 输出: False
枚举的优点
- 可读性强:枚举成员的名称比硬编码的数字或字符串更直观。
- 类型安全:枚举成员是唯一的,防止意外赋值或比较错误。
- 约束值:限制变量只能取预定义的值,减少错误。
- 易于维护:集中管理常量,修改时只需更新枚举定义。
注意事项
避免冲突:同一枚举类中,成员值和名称必须唯一,否则会报错。
使用 IntEnum
:如果需要枚举值参与数值运算,使用 IntEnum
。
from enum import IntEnum
class Priority(IntEnum):
LOW = 1
MEDIUM = 2
HIGH = 3
print(Priority.LOW < Priority.HIGH) # 输出: True
值类型:值可以是任意类型(如字符串、元组),但需确保唯一性。
from enum import Enum
class Status(Enum):
SUCCESS = "ok"
ERROR = "fail"
print(Status.SUCCESS.value) # 输出: ok
不可变性:枚举成员不可修改其值或名称。
from enum import Enum
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
# 以下会报错
# Color.RED = 4 # AttributeError