Сообщить об ошибке.

Использование класса auto модуля enum в Python

Получение автоматических значений в перечислениях enum

Если точное значение в перечислении неважно, то можно использовать класс enum.auto модуля enum:

>>> from enum import Enum, auto
>>> class Color(Enum):
...     RED = auto()
...     BLUE = auto()
...     GREEN = auto()
...
>>> list(Color)
# [<Color.RED: 1>, <Color.BLUE: 2>, <Color.GREEN: 3>]

Значения выбираются функцией _generate_next_value_(), которую можно переопределить:

>>> class AutoName(Enum):
...     def _generate_next_value_(name, start, count, last_values):
...         return name
...
>>> class Ordinal(AutoName):
...     NORTH = auto()
...     SOUTH = auto()
...     EAST = auto()
...     WEST = auto()
...
>>> list(Ordinal)
# [<Ordinal.NORTH: 'NORTH'>, <Ordinal.SOUTH: 'SOUTH'>, 
# <Ordinal.EAST: 'EAST'>, <Ordinal.WEST: 'WEST'>]

Примечания:

  • Целью стандартных методов _generate_next_value_() является предоставление следующего int в последовательности с последним предоставленным int, но способ, которым это делается, является деталью реализации и может измениться.
  • Метод _generate_next_value_() должен быть определен перед любыми членами.