mirror of
https://github.com/python/cpython.git
synced 2025-08-24 02:35:59 +00:00
closes issue18042 -- a unique
decorator is added to enum.py
The docs also clarify the 'Interesting Example' duplicate-free enum is for demonstration purposes.
This commit is contained in:
parent
d85032e25d
commit
f24bb35a69
3 changed files with 115 additions and 29 deletions
16
Lib/enum.py
16
Lib/enum.py
|
@ -4,7 +4,7 @@ import sys
|
|||
from collections import OrderedDict
|
||||
from types import MappingProxyType
|
||||
|
||||
__all__ = ['Enum', 'IntEnum']
|
||||
__all__ = ['Enum', 'IntEnum', 'unique']
|
||||
|
||||
|
||||
class _RouteClassAttributeToGetattr:
|
||||
|
@ -463,3 +463,17 @@ class Enum(metaclass=EnumMeta):
|
|||
|
||||
class IntEnum(int, Enum):
|
||||
"""Enum where members are also (and must be) ints"""
|
||||
|
||||
|
||||
def unique(enumeration):
|
||||
"""Class decorator for enumerations ensuring unique member values."""
|
||||
duplicates = []
|
||||
for name, member in enumeration.__members__.items():
|
||||
if name != member.name:
|
||||
duplicates.append((name, member.name))
|
||||
if duplicates:
|
||||
alias_details = ', '.join(
|
||||
["%s -> %s" % (alias, name) for (alias, name) in duplicates])
|
||||
raise ValueError('duplicate values found in %r: %s' %
|
||||
(enumeration, alias_details))
|
||||
return enumeration
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue