最近我发现了这段代码:
@unique
class NetlistKind(IntEnum):
Unknown = 0
LatticeNetlist = 1
QuartusNetlist = 2
XSTNetlist = 4
CoreGenNetlist = 8
All = 15
@unique
装饰器在上面的代码片段中有什么作用,其目的是什么?
最近我发现了这段代码:
@unique
class NetlistKind(IntEnum):
Unknown = 0
LatticeNetlist = 1
QuartusNetlist = 2
XSTNetlist = 4
CoreGenNetlist = 8
All = 15
@unique
装饰器在上面的代码片段中有什么作用,其目的是什么?
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 并提供详细信息。
auto
,是否需要使用unique
? - paradocslover