Python枚举(Enum)用于定义命名常量,提升可读性与维护性;自3.4起内置enum模块,提供Enum、IntEnum、Flag等类;支持name/value属性、auto()自动赋值、类型安全比较及位运算。

Python 中的枚举(Enum)用于定义一组命名的常量,避免魔法数字或字符串带来的可读性与维护性问题。enum 模块自 Python 3.4 起成为标准库,提供了 Enum、IntEnum、Flag 等实用类,用法简洁且类型安全。
基础枚举类:用 Enum 定义固定选项
最常用的是 Enum 类,每个成员是唯一的、不可变的对象,有名字(name)和值(value)两个属性。
示例:
from enum import Enumclass Color(Enum): RED = 1 GREEN = 2 BLUE = 3
访问方式:
立即学习“Python免费学习笔记(深入)”;
-
Color.RED→ 枚举成员对象(Color.RED) -
Color.RED.name→ 字符串'RED' -
Color.RED.value→ 数值1 -
Color.RED.name和Color.RED.value都不可修改
带语义值的枚举:用 auto() 自动生成序号
当只关心顺序、不关心具体数值时,可用 auto() 自动赋值(从 1 开始递增)。
from enum import Enum, autoclass Status(Enum): PENDING = auto() RUNNING = auto() DONE = auto() FAILED = auto()
Status.PENDING.value → 1,Status.RUNNING.value → 2,以此类推
注意:auto() 不支持混合手动赋值(如 PENDING = 0 后接 RUNNING = auto()),除非导入 _generate_next_value_ 自定义逻辑。
支持比较和运算的枚举:IntEnum 和 Flag
IntEnum 是 int 的子类,可直接与整数比较或参与算术运算;Flag 支持位运算,适合表示多选状态。
-
IntEnum示例:
from enum import IntEnumclass Priority(IntEnum): LOW = 1 MEDIUM = 5 HIGH = 10
print(Priority.HIGH > Priority.LOW) # True(因为它是 int)
-
Flag示例(权限组合):
from enum import Flag, autoclass Permission(Flag): READ = auto() WRITE = auto() EXECUTE = auto()
组合权限
user_perm = Permission.READ | Permission.WRITE print(Permission.READ in user_perm) # True
枚举的实用技巧与注意事项
实际开发中,注意以下几点可提升健壮性和可读性:
- 枚举成员名应大写(PEP 8 推荐),值可为任意不可变类型(如 str、tuple),不限于 int
- 避免重复 value(同值会创建别名,不是独立成员);如需强制唯一值,加
@unique装饰器 - 可通过
Color['RED']或Color(1)反向查找成员(但需确保输入合法,否则抛异常) - 在 JSON 序列化时,需自定义 encoder(如把
Color.RED转为"RED"或1)
不复杂但容易忽略。










