StrEnum а не Enum?Всё просто, дефолтный
Enum не поддерживает нативное сравнение с нужным нам типом.from enum import Enum
class DefaultEnum(Enum):
KEY = "value"
"value" == DefaultEnum.KEY # False
"value" == DefaultEnum.KEY.value # True
Как видите, приходится вызывать
.value, что неудобно в некоторых случаях и более многословно. StrEnum это исправляет:from enum import StrEnum
class StringEnum(StrEnum):
KEY = "value"
"value" == StringEnum.KEY # True
Для примера из прошлого поста это выглядело бы так:
if task.status == TaskStatus.PENDING:
...
Точно так же работает и IntEnum.
StrEnum появился в версии 3.11, для более ранних использовали комбинацию MyEnum(str, Enum), что не тоже самое.StrEnum правильно создает значения с функцией auto(). Сочетание str+Enum создает числа, но в виде строк. Приходится явно писать строки. Сделал пару примеров для сравнения↗️Когда не стоит использовать
StrEnum:- когда нужно явное отличие значений энума от строки
- когда в проекте уже используется обычный
Enum#tricks