TGViewer
Zen of Python Zen of Python @zen_of_python · 18.8K subscribers
Post #4178 2.5K
enum: где обладает преимуществом

Встроенный модуль 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
  • 👍 4
  • ❤ 1
  • 👎 1
More from @zen_of_python
  1. Sep 28, 2026partial или lambda: как специализировать колбэк без сюрпризов functools.partial заранее св…
  2. Sep 28, 2026Как коллизии превращают построение set в Python в квадратичную задачу Привычное O(1) для s…
  3. Sep 28, 2026Как проверять инварианты Python-кода с Hypothesis Обычный тест фиксирует конкретный ввод и…
  4. Sep 27, 2026Как запускать собственный SQL через миграции Django У models.Index нашлось необычное приме…
  5. Sep 27, 2026Как разделить синхронный и асинхронный Python-клиенты При переписывании akismet автор отка…
  6. Sep 27, 2026Как заменить цепочку isinstance на singledispatch Когда обработка типов разрастается, цепо…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →