После честного стража из прошлого урока на столе осталось семь подделок. Лорра берёт верхнюю, контракт 0308, и кладёт её под лампу. Все поля правильные по отдельности. Неправильно то, что они стоят вместе.
До сих пор типы защищали поля: номер не строка, статус из трёх слов, у словаря нет лишних ключей. Подделка 0308 прошла мимо всех этих защит, потому что ложь не в поле, а в сочетании полей. Проверять сочетания можно бесконечно: каждое новое поле умножает их число.
Есть другой путь. Не описывать одну запись с флажками, а описать каждое состояние контракта отдельно, только с теми полями, которые в нём точно есть. Тогда у черновика нет поля «кто подписал», и «подписан и отозван без подписи» нечем записать. Это середина раздела и главный приём проектирования типов: недопустимые состояния непредставимы.
урок из курса
Урок из курса «Python backend: Тарбадель». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.