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() 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
Перебор (итерация)
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 | |
| Полиморфизм |
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы. Если там пусто считайте это рекламой моей телеги