Класс 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 — локальная установка не требуется.