Если точное значение в перечислении неважно, то можно использовать класс 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_()
должен быть определен перед любыми членами.