装饰器 · enum.unique

0. 一句话定位

维度 内容
作用对象 枚举类
使用场景 唯一约束
来源 标准库 enum.unique
语法形式 @uniquefrom enum import unique

1. 做什么

装饰 Enum 子类;若两个成员被赋相同值(非 alias 语义下的重复),类创建时立即 ValueError,避免隐式 alias 造成误判。

2. 重点参数

参数 类型 默认值 作用 配置建议
enum_class Enum 子类 被检查的枚举类 仅作类装饰器使用

3. 最小可运行示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from enum import Enum, unique

@unique
class VehicleType(Enum):
CAR = 1
TRUCK = 2
MOTORCYCLE = 3
BUS = 4

try:
@unique
class DuplicateVehicleType(Enum):
CAR = 1
TRUCK = 2
MOTORCYCLE = 3
BUS = 3 # 与 MOTORCYCLE 重复
except ValueError as e:
print(f"Error: {e}")

4. 常见变体

  • 不使用 @unique 时,相同值会自动成为 alias(如 BUS = MOTORCYCLE),仅第一个名称为 canonical
  • @unique 禁止这种「非显式 alias」的重复赋值

5. 适用 / 不适用

适用

  • 枚举值需一一对应业务码、状态码,不能混淆
  • API 契约要求每个成员有独立 value

不适用

  • 故意用 alias 表达同义名(如 TRUE = 1; YES = 1 且不需 @unique
  • Flag 组合枚举(语义不同)

6. 易踩坑

  • 仅检查 value 重复,不检查 name 重复(name 重复本身非法)
  • auto() 联用时一般无重复问题;手动赋值需自检

7. 参考

-------------本文结束感谢您的阅读-------------