Python枚举(Enum)用于定义命名常量,提升可读性与维护性;自3.4起内置enum模块,提供Enum、IntEnum、Flag等类;支持name/value属性、auto()自动赋值、类型安全比较及位运算。
Python 中的枚举(Enum)用于定义一组命名的常量,避免魔法数字或字符串带来的可读性与维护性问题。enum 模块自 Python 3.4 起成为标准库,提供了 Enum、IntEnum、Flag 等实用类,用法简洁且类型安全。
最常用的是 Enum 类,每个成员是唯一的、不可变的对象,有名字(name)和值(value)两个属性。
示例:
from enum import Enumclass Color(Enum): RED = 1 GREEN = 2 BLUE = 3
访问方式:
Color.RED → 枚举
成员对象(Color.RED)Color.RED.name → 字符串 'RED'
Color.RED.value → 数值 1
Color.RED.name 和 Color.RED.value 都不可修改当只关心顺序、不关心具体数值时,可用 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 是 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
实际开发中,注意以下几点可提升健壮性和可读性:
@unique 装饰器Color['RED'] 或 Color(1) 反向查找成员(但需确保输入合法,否则抛异常)Color.RED 转为 "RED" 或 1)不复杂但容易忽略。