0. 一句话定位
| 维度 | 内容 |
|---|---|
| 作用对象 | 枚举类 |
| 使用场景 | 唯一约束 |
| 来源 | 标准库 enum.unique |
| 语法形式 | @unique(from enum import unique) |
1. 做什么
装饰 Enum 子类;若两个成员被赋相同值(非 alias 语义下的重复),类创建时立即 ValueError,避免隐式 alias 造成误判。
2. 重点参数
| 参数 | 类型 | 默认值 | 作用 | 配置建议 |
|---|---|---|---|---|
enum_class |
Enum 子类 | — | 被检查的枚举类 | 仅作类装饰器使用 |
3. 最小可运行示例
1 | from enum import Enum, unique |
4. 常见变体
- 不使用
@unique时,相同值会自动成为 alias(如BUS = MOTORCYCLE),仅第一个名称为 canonical @unique禁止这种「非显式 alias」的重复赋值
5. 适用 / 不适用
适用
- 枚举值需一一对应业务码、状态码,不能混淆
- API 契约要求每个成员有独立 value
不适用
- 故意用 alias 表达同义名(如
TRUE = 1; YES = 1且不需@unique) Flag组合枚举(语义不同)
6. 易踩坑
- 仅检查 value 重复,不检查 name 重复(name 重复本身非法)
- 与
auto()联用时一般无重复问题;手动赋值需自检