Встроенный модуль
enum предоставляет удобный способ создания перечислений — наборов именованных констант, которые облегчают работу с фиксированными наборами значений. Это особенно полезно, когда необходимо ограничить возможные значения переменной определенным списком.Рассмотрим функцию, которая получает температуру в заданном городе:
def get_temperature(city, unit):
...
Значение параметра
unit может быть либо "celsius", либо "fahrenheit". Однако использование строковых литералов может привести к ошибкам из-за опечаток или несогласованности в написании. Чтобы избежать этого, можно использовать перечисление:
from enum import Enum
class TempUnit(Enum):
CELSIUS = "celsius"
FAHRENHEIT = "fahrenheit"
Теперь функция может быть вызвана так:
get_temperature("Lisbon", TempUnit.CELSIUS)
Это обеспечивает автодополнение в IDE, предотвращает опечатки и делает код более самодокументируемым.
Когда конкретные значения не имеют значения, можно использовать
auto для автоматического присвоения значений:
from enum import Enum, auto
class Weekday(Enum):
MONDAY = auto()
TUESDAY = auto()
WEDNESDAY = auto()
В этом случае значения будут автоматически присвоены в порядке определения.
Модуль
enum также предоставляет специализированные классы перечислений:— IntEnum: Подкласс
int, позволяющий использовать перечисления в арифметических операциях;— Flag / IntFlag: Позволяют комбинировать значения с помощью побитовых операций, что полезно для представления множественных состояний.
В нем также представлены дополнительные инструменты для работы с перечислениями:
— EnumCheck: Позволяет проверять уникальность значений в перечислении;
— FlagBoundary: Управляет поведением при работе с недопустимыми значениями в перечислениях
Flag;— EnumDict: Подкласс
dict, используемый при создании метаклассов перечислений.#основы
@zen_of_python