2.1.4 唯一枚举值
有相同值的Enum成员会被处理为同一个成员对象的别名引用。别名可以避免Enum的迭代器中出现重复的值。
import enum
class BugStatus(enum.Enum):
new = 7
incomplete = 6
invalid = 5
wont_fix = 4
in_progress = 3
fix_committed = 2
fix_released = 1
by_design = 4
closed = 1
for status in BugStatus:
print('{:15} = {}'.format(status.name,status.value))
print('\nSame:by_design is wont_fix: ',
BugStatus.by_design is BugStatus.wont_fix)
print('Same:closed is fix_released: ',
BugStatus.closed is BugStatus.fix_released)
由于by_design和closed是其他成员的别名,迭代处理Enum时它们不会单独出现在输出中。一个成员的规范名是与这个值关联的第一个名字。
运行结果:
如果要求所有成员有唯一的值,则要为Enum增加@unique修饰符。
import enum
@enum.unique
class BugStatus(enum.Enum):
new = 7
incomplete = 6
invalid = 5
wont_fix = 4
in_progress = 3
fix_committed = 2
fix_released = 1
# This will trigger an error with unique applied.
by_design = 4
closed = 1
解释Enum类时,有重复值的成员会触发一个ValueError异常。
运行结果: