Zen of Python
Фотография
нажмите — покажем
нажмите — покажем
Enum ограничивает состояния, но не проверяет переходы
Статус "paied" — допустимая строка. Enum позволяет проверить значение на границе приложения:
from enum import Enum
class Status(Enum):
NEW = "new"
PAID = "paid"
print(Status("paid") is Status.PAID) # True
# Status("paied") вызовет ValueError
В разборе Enum отдельно рассматривают значения для сериализации и имена членов. Status("paid") ищет по значению, а Status["PAID"] — по имени.
Но наличие статусов NEW и PAID не запрещает переход обратно. Разрешённые переходы нужно описать отдельно, например в методе объекта или таблице правил.
Если значения уходят в API или базу, выбирайте их явно. Переименование элемента перечисления и изменение внешнего строкового значения могут иметь разные последствия для совместимости.
#python #архитектура
❤1
5 · 919 ·