0Pricing
Python Academy · Урок

Класс Enum

Определяйте группы именованных констант

«Класс Enum» — бесплатный урок Python Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Зачем нужны перечисления

Перечисление — это набор именованных постоянных значений, связанных между собой. Вместо того чтобы разбрасывать по коду магические строки или числа, присвойте каждому значению понятное имя.

  • Код становится понятнее без дополнительных пояснений.
  • Защита от опечаток.
  • Фиксированный, заранее известный набор вариантов.

Определение перечисления

Унаследуйте класс от Enum и перечислите его элементы в виде NAME = value. По соглашению имена элементов пишутся прописными буквами.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

print(Color.RED)

Имя и значение

У каждого элемента перечисления есть .name (идентификатор) и .value (присвоенное значение).

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

c = Color.GREEN
print(c.name)
print(c.value)

Элементы существуют в единственном экземпляре

Каждый элемент — уникальный объект, существующий в единственном экземпляре. Сравнивайте элементы с помощью is или ==: один и тот же элемент всегда является одним и тем же объектом.

from enum import Enum

class Color(Enum):
    RED = 1
    BLUE = 2

print(Color.RED is Color.RED)
print(Color.RED == Color.BLUE)

Поиск по значению

Вызовите класс перечисления со значением, чтобы получить соответствующий элемент. Неизвестное значение вызывает ValueError.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

print(Color(2))
try:
    Color(99)
except ValueError as e:
    print('Bad value:', e)

Поиск по имени

Используйте доступ в квадратных скобках с именем элемента в виде строки, чтобы найти элемент по имени. Это удобно, когда имена считываются из конфигурации или пользовательского ввода.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2

print(Color['GREEN'])

Перебор элементов

Перечисление поддерживает перебор. Цикл возвращает каждый элемент в порядке определения, что удобно для построения меню или проверки вариантов.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

for c in Color:
    print(c.name, c.value)

Строковые значения

Значения перечисления не ограничены целыми числами. Строки используются часто, особенно для значений, которые сериализуются или сохраняются.

from enum import Enum

class Status(Enum):
    ACTIVE = 'active'
    PAUSED = 'paused'
    CLOSED = 'closed'

print(Status.PAUSED.value)
print(Status('closed'))

auto() для значений

Когда конкретные числа не важны, используйте auto(), чтобы автоматически присвоить значения, начиная с 1 и увеличивая их на единицу.

from enum import Enum, auto

class Direction(Enum):
    NORTH = auto()
    SOUTH = auto()
    EAST = auto()
    WEST = auto()

for d in Direction:
    print(d.name, d.value)

Перечисления в функциях

Использование перечислений в качестве параметров функций делает намерение ясным и защищает от недопустимого ввода. Сравнивайте элементы напрямую внутри логики функции.

from enum import Enum

class Light(Enum):
    RED = 1
    YELLOW = 2
    GREEN = 3

def can_go(light):
    return light is Light.GREEN

print(can_go(Light.GREEN))
print(can_go(Light.RED))

Элементы в словаре

Элементы перечисления являются хешируемыми, поэтому их можно использовать как ключи словаря. Это удобный способ связать данные с каждой именованной константой.

from enum import Enum

class Color(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

hex_codes = {Color.RED: '#ff0000', Color.GREEN: '#00ff00'}
print(hex_codes[Color.RED])

Быстрая проверка

Как правильно сравнить два элемента перечисления на идентичность?

Повторение

Вы научились определять группы именованных констант с помощью Enum.

  • У элементов есть .name и .value.
  • Ищите элемент по значению с помощью Color(v), а по имени — с помощью Color['NAME'].
  • Перечисления поддерживают перебор, а элементы существуют в единственном экземпляре.
  • Используйте auto(), когда точные значения не важны.

Часто задаваемые вопросы

Урок «Класс Enum» бесплатный?

Да — полный текст урока «Класс Enum» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «Класс Enum»?

Определяйте группы именованных констант Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Класс Enum»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Класс Enum
  2. IntEnum и Flag
  3. Основы NamedTuple
  4. typing.NamedTuple
← Назад к Python Academy