Поиск по сайту:
Затравленный и прижатый к стене кот превращается в тигра (М. Сервантес).

Как создать перечисления. Использование объектов Enum в Python

08.09.2021
Как создать перечисления. Использование объектов Enum в Python

В этой статье будет рассмотрена статья по использованию объектов Enum в Python. Перечисление или класс «enumeration» позволяют создавать уникальные константы, значение которых остается неизменным в программах и приложениях Python. Все примеры кода в этой статье протестированы с Python 3.9.5 в Ubuntu 21.04.

 

О объектах Enums в Python

Как указывалось ранее, перечисления – это объекты, имеющие постоянные значения. У них есть символические или репрезентативные имена, прикрепленные к их соответствующим значениям. Они похожи на другие переменные Python, но обладают некоторыми уникальными функциями, такими как типобезопасные объекты и группировка. В Python перечисления всегда представлены с использованием символов верхнего регистра, чтобы указать, что они имеют постоянные значения. Перечисления особенно полезны в случаях, когда у вас есть предопределенный диапазон возможных значений, и вам нужно выбирать и ссылаться на ограниченный выбор в логике вашей программы. Использование Enums в Python можно лучше понять на примерах. Некоторые из них описаны ниже.

 

Создание перечислений

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

from enum import Enum

class Color(Enum):
YELLOW = 1
BLACK = 2
WHITE = 3
PURPLE = 4
ORANGE = 5

print (Color(1))
print (repr(Color(1)))
print (Color.YELLOW)
print (type(Color.YELLOW))
print (Color.YELLOW.name)
print (Color.YELLOW.value)

 

Первый оператор импортирует класс Enum из модуля enum. Затем создается новый класс под названием «Color» путем наследования класса Enum. Затем создаются некоторые переменные (члены перечисления) с постоянными значениями. Эти переменные представляют пять возможных вариантов. Следующие несколько операторов печати показывают, как вы можете получить доступ к этим перечислениям, их именам и значениям. Эти утверждения говорят сами за себя. Чтобы получить доступ к возможному выбору перечисления, вы можете использовать точечную нотацию или указать известное значение в качестве аргумента класса. После выполнения приведенного выше примера кода вы должны получить следующий результат:

Color.YELLOW

Color.YELLOW

YELLOW
1

 

Читать  GIMP 2.10.28 выпущен с улучшениями и исправлениями ошибок, новая функция Script-Fu

Как видно из выходных данных, есть множество способов получить доступ к членам перечисления. Обратите внимание, что вызов функции печати для перечисления вернет его удобочитаемую строковую форму, а не значение. Таким образом, обращение к Color.YELLOW вернет Color.YELLOW, а не 1.

 

Итерация по перечислениям

Вы можете перебирать объект типа перечисления и получать его члены с помощью операторов цикла.

from enum import Enum

class Color(Enum):
YELLOW = 1
BLACK = 2
WHITE = 3
PURPLE = 4
ORANGE = 5

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

Используя переменную «c», вы можете получить доступ к каждому члену объекта типа перечисления Color. После выполнения приведенного выше примера кода вы должны получить следующий результат.

YELLOW 1
BLACK 2
WHITE 3
PURPLE 4
ORANGE 5

Имя членов перечисления должно быть уникальным, но допускаются повторяющиеся значения

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

from enum import Enum

class Color(Enum):
BLACK = 1
BLACK = 2
WHITE = 3
PURPLE = 4
ORANGE = 5

 

После выполнения приведенного выше примера кода вы должны получить примерно такую ​​ошибку:

File "/usr/lib/python3.9/enum.py", line 133, in __setitem__
raise TypeError('Attempted to reuse key: %r' % key)
TypeError: Attempted to reuse key: 'BLACK'

 

Как вы можете видеть в выходных данных, повторяющиеся имена не допускаются для членов перечисления. Однако следующий код действителен, если два члена перечисления имеют одинаковые значения.

from enum import Enum

class Color(Enum):
YELLOW = 2
BLACK = 2
WHITE = 3
PURPLE = 4
ORANGE = 5

 

Если вы также хотите принудительно установить уникальные значения для членов перечисления вместе с их именами, вы можете использовать «уникальный» декоратор для предотвращения дублирования значений.

from enum import Enum, unique

@unique
class Color(Enum):
YELLOW = 2
BLACK = 2
WHITE = 3
PURPLE = 4
ORANGE = 5

 

Читать  Как запустить быстрое сетевое сканирование с помощью Nmap

Декоратор «@unique» заставляет объекты типа перечисления выдавать ошибку, когда есть повторяющиеся значения, присвоенные членам перечисления. После выполнения приведенного выше примера кода вы должны получить следующий результат:

File "/usr/lib/python3.9/enum.py", line 989, in unique
raise ValueError('duplicate values found in %r: %s' %
ValueError: duplicate values found in : BLACK -> YELLOW

Автоматическое присвоение значений членам перечисления

Если значения членов перечисления не имеют для вас значения, вы можете использовать метод «auto», доступный в модуле перечисления, для автоматического присвоения последовательных номеров членам перечисления.

from enum import Enum, auto

class Color(Enum):
YELLOW = auto()
BLACK = auto()
WHITE = auto()
PURPLE = auto()
ORANGE = auto()

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

 

Как вы можете видеть в приведенном выше примере кода, вместо явного присвоения некоторых значений членам перечисления при создании каждого члена вызывалась функция auto. Метод auto всегда назначает 1 в качестве первого значения. После выполнения приведенного выше примера кода вы должны получить следующий результат:

YELLOW 1
BLACK 2
WHITE 3
PURPLE 4
ORANGE 5

Заключение

Объекты типа Enums в Python позволяют создавать переменные постоянного стиля с уникальными именами. Эти переменные, обычно называемые членами перечисления, могут быть представлены читаемыми строками. Перечисления особенно полезны, когда вы хотите выбрать один или несколько вариантов из группы ограниченных вариантов.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 3,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
В этой статье объясняется, как получать файлы и каталоги с…

Спасибо!

Теперь редакторы в курсе.