Python中的@unique装饰器是做什么的?

26

最近我发现了这段代码:

@unique
class NetlistKind(IntEnum):
  Unknown = 0
  LatticeNetlist = 1
  QuartusNetlist = 2
  XSTNetlist = 4
  CoreGenNetlist = 8
  All = 15

@unique 装饰器在上面的代码片段中有什么作用,其目的是什么?

1个回答

39

摘要

unique 是用于 Enum 的类装饰器,如果存在任何重复的枚举值,则会引发 ValueError 异常。

此代码

from enum import unique, Enum

@unique
class Mistake(Enum):
    ONE = 1
    TWO = 2
    THREE = 3
    FOUR = 3

会产生这个错误:

ValueError: duplicate values found in <enum 'Mistake'>: FOUR -> THREE

更多细节

来自文档

背景

默认情况下,枚举允许多个名称作为相同值的别名。当不希望出现这种行为时,可以使用 [unique] 来确保每个值在枚举中仅使用一次。

说明

[unique] 是专门用于枚举的类装饰器。它确保任何一个值只被绑定到一个名称上 [在枚举中]。[unique] 搜索一个枚举的 __members__,收集找到的任何别名;如果找到任何别名,则引发 ValueError 并提供详细信息。


1
如果我们使用auto,是否需要使用unique - paradocslover
2
"require"...不是必须的,但这并不会有害。如果您想帮助未来的自己或接触代码的其他人确保所有值都是唯一的,@unique可能仍然是一个好主意。以防将来的代码编辑不使用auto,或者由于某些其他原因导致重复。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接