Перечисления в Python
В этой статье объясняются перечисления в Python.
YouTube Video
Перечисления в Python
enum
в Python — это специальный класс для определения констант, который улучшает читаемость и помогает предотвратить ошибки в коде.
Что такое Enum
?
Enum
(сокращение от enumeration) — это класс, используемый для определения набора именованных констант. Обычно он используется для группировки связанных констант. Например, он подходит для представления цветов, дней недели или направлений.
Почему стоит использовать Enum
?
Есть несколько причин использовать Enum
.
- Улучшенная читаемость: Использование именованных констант делает код более понятным.
- Предотвращение ошибок: Это предотвращает изменения или некорректное использование значений констант.
- Группировка: Это организует связанные константы в один класс, представляющий структурированные данные.
Основное использование Enum
Чтобы использовать enum
, импортируйте модуль enum
и определите класс. Класс должен наследовать от Enum
и определять значения, которые вы хотите рассматривать как константы.
Базовый пример использования Enum
1from enum import Enum
2
3class Color(Enum):
4 RED = 1
5 GREEN = 2
6 BLUE = 3
7
8# Usage of Enum
9print(Color.RED) # Color.RED
10print(Color.RED.name) # RED
11print(Color.RED.value) # 1
В этом примере мы определяем класс Enum
, называемый Color
, с тремя значениями. К каждому имени можно получить доступ через атрибут name
, а к связанному значению — через атрибут value
.
Сравнение перечислений
Члены Enum
можно сравнивать как по имени, так и по значению. Для проверки идентичности и равенства можно использовать оператор is
или оператор ==
.
Пример сравнения
1from enum import Enum
2
3class Direction(Enum):
4 NORTH = 1
5 SOUTH = 2
6 EAST = 3
7 WEST = 4
8
9# Equality comparison
10print(Direction.NORTH == Direction.SOUTH) # False
11print(Direction.NORTH == Direction.NORTH) # True
12
13# Identity comparison using is
14print(Direction.NORTH is Direction.SOUTH) # False
15print(Direction.NORTH is Direction.NORTH) # True
Здесь демонстрируются сравнения Enum
с использованием ==
и is
. Enum
создан для правильного сравнения объектов с одинаковыми именами и значениями.
Автоматическое присвоение значений с помощью auto()
Если вы хотите автоматически присваивать значения членам Enum
, вы можете использовать enum.auto()
. auto()
позволяет Python автоматически назначать значения, исключая необходимость их ручного указания разработчиками.
Пример использования auto()
1from enum import Enum, auto
2
3class Animal(Enum):
4 DOG = auto()
5 CAT = auto()
6 MOUSE = auto()
7
8# Check the values of Enum
9print(Animal.DOG.value) # 1
10print(Animal.CAT.value) # 2
11print(Animal.MOUSE.value) # 3
В этом примере использование auto()
устраняет необходимость явного указания значений, делая код более лаконичным.
Присвоение нескольких значений членам Enum
Члены Enum
также могут содержать несколько значений, например, кортежи. Это позволяет каждому члену содержать дополнительную сопутствующую информацию.
Пример использования кортежей
1from enum import Enum
2
3class Status(Enum):
4 ACTIVE = (1, 'Active user')
5 INACTIVE = (2, 'Inactive user')
6 SUSPENDED = (3, 'Suspended user')
7
8# Accessing Enum members
9print(Status.ACTIVE.name) # ACTIVE
10print(Status.ACTIVE.value) # (1, 'Active user')
11print(Status.ACTIVE.value[1]) # Active user
В этом примере члены класса Status
имеют два значения, представляющие состояние и описание. Это удобно, когда вы хотите связать с членом Enum
несколько данных.
Использование Enum
в качестве флагов
Библиотека enum
в Python включает класс Flag
, который можно использовать как побитовые флаги. Использование Flag
позволяет управлять несколькими состояниями в комбинации.
Пример использования Flag
1from enum import Flag, auto
2
3class Permission(Flag):
4 READ = auto()
5 WRITE = auto()
6 EXECUTE = auto()
7
8# Combining flags
9permission = Permission.READ | Permission.WRITE
10print(permission) # Permission.READ|WRITE
11print(Permission.EXECUTE in permission) # False
В этом примере побитовые операции используются для объединения нескольких разрешений. Использование Flag
позволяет лаконично управлять несколькими состояниями.
Важные моменты при использовании Enum
Неизменяемость Enum
Члены Enum
являются неизменяемыми. После определения их имена или значения нельзя изменить. Это важная характеристика для сохранения согласованности в качестве констант.
1from enum import Enum
2
3class Days(Enum):
4 MONDAY = 1
5 TUESDAY = 2
6
7# Example of immutability
8# Days.MONDAY = 3 # AttributeError: Cannot reassign members.
Запрещение дублирующихся членов
Enum
элементы должны иметь уникальные имена и значения. Даже если повторяющиеся значения разрешены, Python автоматически приоритезирует первый элемент.
Резюме
Модуль enum
в Python — это очень полезный инструмент для группировки наборов констант, улучшения читаемости и поддержания согласованности кода. Возможен широкий спектр использования, от базового применения до автоматического присвоения значений с использованием auto()
, а также использования в качестве битовых флагов.
Правильное понимание и освоение enum
может улучшить качество кода и помочь избежать ошибок.
Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.