enum

Содержание
Введение
Перебор (итерация)
Особенность
Статьи про Python

Введение

Перечисление-это набор символических имен (членов), привязанных к уникальным, постоянным значениям.

Внутри перечисления члены могут сравниваться по идентичности

Также по ним можно итерировать (пример)

Создайте файл enum_demo.py и копируйте туда код из примеров.

Запустить файл можно командой

python enum_demo.py

Или если вы в Linux

python3 enum_demo.py

Перед тем как переходить к изучению enum вспомним как создаются классы .

Обычный класс:

class Employee: def __init__(self, name, salary): self.name = name self.salary = salary developer = Employee("Alex", 7000)

dataclass

@dataclass() class Project: site: str manager: str improvement = Project("Improvement", "Yuri")

Наследование от enum не похоже ни на создание обычного класса ни датакласса.

from enum import Enum # Using enum class create enumerations class Days(Enum): Mon = 1 Tue = 2 Wed = 3 Sun = 7 # print name of enum member print("The name of enum member is: ", end ="") print(Days.Tue.name) # print value of enum member print("The value of enum member is: ", end ="") print(Days.Tue.value) # print the enum member as a string print("The enum member as a string is: ", end="") print(Days.Mon) # print the enum member as a repr print("The enum member as a repr is: ", end="") print(repr(Days.Sun)) # Check type of enum member print("The type of enum member is: ", end ="") print(type(Days.Mon)) print(f"{Days.Wed} name is {Days.Wed.name} value is {Days.Wed.value}")

python enum_demo.py

The name of enum member is: Tue The value of enum member is: 2 The enum member as a string is: Days.Mon The enum member as a repr is: <Days.Sun: 7> The type of enum member is: <enum 'Days'> Days.Wed name is Wed value is 3

РЕКЛАМА хостинга Beget, которым я пользуюсь более десяти лет

Изображение баннера

Конец рекламы хостинга Beget, который я всем рекомендую.

Перебор (итерация)

Days является итерируемым

for day in Days: print(day)

Days.Mon Days.Tue Days.Wed Days.Sun

Можно добавить в вывод имя и значение

for day in Days: print(f"{day} name is {day.name} value is {day.value}")

Days.Mon name is Mon value is 1 Days.Tue name is Tue value is 2 Days.Wed name is Wed value is 3 Days.Sun name is Sun value is 7

Особенность

Вы, скорее всего, уже обратили внимание на то, что в отличие от обычных классов мы нигде не создавали явно экземляров класса Days

class Days: pass day = Days()

Такого не было.

Попытка явно создать экземпляр класса Days приведёт к ошибке.

from enum import Enum class Days(Enum): Mon = 1 Tue = 2 Wed = 3 Sun = 7 d = Days()

File "C:\A\demo.py", line 11, in <module> d = Days() ^^^^^^ TypeError: EnumType.__call__() missing 1 required positional argument: 'value'

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

Пример

Попробуем разобраться для чего нужен enum.

Допустим стоит задача создать класс User, у которого есть два атрибута name и type

name - строка

type - кастомный тип, может иметь три значения Admin, Moderator и Customer

Требования:

Если user_a и user_b разных типов, это должно быть видно при проверке функцией type

user_a.type == user_b.type False

Тип должен быть кастомным, называться может USER_TYPE, UserType или что-то в этом роде.

type(user_a.type) <class 'USER_TYPE'>

Из второго требования вытекает, что тип не дожен быть просто строкой "Admin", "Moderator" или "Customer"

Автор статьи: Андрей Олегович

Похожие статьи
ООП в Python
Классы
Методы
class variables
class methods
Статические методы
Наследование
super()
Специальные методы
dataclass
__slots__
Декоратор property
Полиморфизм

РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе

Конец рекламы. Если там пусто считайте это рекламой моей телеги

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: