Python枚举类默认不允许同名成员,会抛出TypeError;可通过值相同创建别名实现名称重复,但不生成新成员;使用@unique装饰器可禁止重复值。

Python 3 的枚举类(Enum)默认不允许在同一个枚举类中定义重复的成员名称。如果尝试这样做,会直接抛出 TypeError 异常。
例如:
from enum import Enum <p>class Color(Enum): RED = 1 RED = 2 # 抛出 TypeError: Attempted to reuse key: 'RED'
这说明 Python 枚举在定义阶段就会检查名称冲突,不允许同名成员存在。
虽然不能有完全独立的同名成员,但可以通过“别名”方式实现名称重复。当一个枚举成员的值与之前成员相同时,它会被视为前者的别名,不会报错,但也不会创建新成员。
立即学习“Python免费学习笔记(深入)”;
from enum import Enum <p>class Color(Enum): RED = 1 CRIMSON = 1 # CRIMSON 是 RED 的别名</p><p>print(Color.RED) # Color.RED print(Color.CRIMSON) # Color.RED print(Color.CRIMSON is Color.RED) # True</p>
这里 CRIMSON 不是独立成员,而是 RED 的别名。枚举的迭代只会包含主成员,不包括别名:
<code>for color in Color:
print(color)
# 输出:
# Color.RED
# (没有 Color.CRIMSON)
如果你希望禁止任何值重复(即禁止别名),可以使用 @unique 装饰器:
from enum import Enum, unique <p>@unique class Color(Enum): RED = 1 GREEN = 2 BLUE = 1 # ValueError: duplicate values found in <enum 'Color'>: BLUE -> RED
这样一旦有重复值(即使是别名),都会抛出错误。
使用函数式方式创建枚举时,名称重复同样会引发问题:
Color = Enum('Color', 'RED GREEN RED') # TypeError: Encountered duplicate field name: 'RED'
应确保传入的名称列表无重复。
若想通过函数式创建带别名的枚举,可使用字典方式:
Color = Enum('Color', {'RED': 1, 'CRIMSON': 1, 'BLUE': 2})
# CRIMSON 是 RED 的别名,不会报错
基本上就这些。Python 枚举的设计本意是名称唯一、语义清晰,重复名称被严格限制,但允许通过值相同的方式创建别名。需要控制是否允许别名时,可用 @unique 来加强校验。
以上就是Python3枚举类如何处理重复名称?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号