Перечисления enum.Enum
создаются с использованием синтаксиса класса, что упрощает их чтение и запись. Альтернативный метод создания описан в функциональном API enum.Enum
.
Чтобы определить перечисление, создайте подкласс enum.Enum следующим образом:
>>> from enum import Enum >>> class Color(Enum): ... RED = 1 ... GREEN = 2 ... BLUE = 3
Примечание. Значения членов перечисления могут быть любыми: int
, str
и т. д. Если точное значение не имеет значения, то можно использовать экземпляры enum.auto
, и будет выбрано подходящее значение. Будьте осторожны, при смешивании enum.auto
с другими значениями.
Примечание: терминология.
Color
- это перечисление (или enum
)Color.RED
, Color.GREEN
и т. д. являются членами перечисления (или членами enum
) и являются функциональными константами.Примечание. Несмотря на то, что используется синтаксис класса для создания перечислений, сами перечисления не являются обычными классами Python. Подробнее смотрите в разделе "Чем отличаются перечисления? Больше подробностей".
Члены перечисления Enum
имеют удобочитаемые строковые представления:
>>> print(Color.RED) # Color.RED
...в то время как их repr()
имеет больше информации:
>>> print(repr(Color.RED)) # <Color.RED: 1>
Тип type
элемента перечисления - это перечисление, к которому он принадлежит:
>>> type(Color.RED) # <enum 'Color'> >>> isinstance(Color.GREEN, Color) # True
Члены Enum
также имеют свойство, которое содержит только их имя элемента:
>>> print(Color.RED.name) # RED
Перечисления поддерживают итерацию в порядке определения:
>>> class Shake(Enum): ... VANILLA = 7 ... CHOCOLATE = 4 ... COOKIES = 9 ... MINT = 3 ... >>> for shake in Shake: ... print(shake) ... # Shake.VANILLA # Shake.CHOCOLATE # Shake.COOKIES # Shake.MINT
Члены перечисления enum.Enum
хешируются, поэтому их можно использовать в словарях и множествах:
>>> apples = {} >>> apples[Color.RED] = 'red delicious' >>> apples[Color.GREEN] = 'granny smith' >>> apples == {Color.RED: 'red delicious', Color.GREEN: 'granny smith'} # True