python 枚举通过 enum 模块实现,用于定义命名常量以提升可读性、避免魔法值;支持 enum、intenum、strenum 及 auto() 自增;成员不可变,value 相同视为别名(可用 @unique 校验)。

Python 中的枚举类型通过 enum 模块(注意是 enum,不是 _enum)实现,这是标准库中正式、稳定且推荐的方式。_enum 是内部模块,不对外公开,不应直接导入或使用。
为什么要用 enum 模块?
枚举用于定义一组命名的常量,能提升代码可读性、避免魔法数字/字符串,并支持类型检查和 IDE 自动补全。比如用 Color.RED 代替硬编码的 "red" 或 1,语义清晰,不易出错。
基础用法:定义和访问枚举成员
继承 Enum 类即可创建枚举:
示例:
立即学习“Python免费学习笔记(深入)”;
from enum import Enum <p>class Status(Enum): PENDING = 1 RUNNING = 2 DONE = 3 FAILED = 4
访问方式有多种:
-
Status.PENDING—— 获取枚举成员对象(类型为Status) -
Status.PENDING.name→"PENDING"(字符串名) -
Status.PENDING.value→1(绑定的值) -
Status.PENDING.label→ 报错,除非手动添加属性
常用枚举变体与技巧
IntEnum:继承自 int,可直接与整数比较:
from enum import IntEnum
class Priority(IntEnum):
LOW = 1
MEDIUM = 2
HIGH = 3
<p>print(Priority.HIGH > Priority.LOW) # True(普通 Enum 不支持)
StrEnum(Python 3.11+):继承自 str,自动支持字符串操作:
from enum import StrEnum
class FileType(StrEnum):
JSON = "application/json"
XML = "application/xml"
<p>print(FileType.JSON.startswith("application/")) # True
自动赋值:用 auto() 让值自增(需导入):
from enum import Enum, auto
class Direction(Enum):
UP = auto() # 1
DOWN = auto() # 2
LEFT = auto() # 3
实用注意事项
- 枚举成员不可变,不能重新赋值(
Status.PENDING = 99会报错) - 相同 value 的成员会被视为别名(除非加
@unique装饰器校验唯一性) - 可用
list(Status)遍历所有成员;Status(2)可按 value 查找成员 - JSON 序列化需自定义 encoder,因默认不支持枚举









