Когда я только узнал про программирование с помощью контрактов, то попробовал сделать модуль для контрактов на Go. Получилось не очень удачно. Но мне написал автор другого похожего модуля с предложением сделать общую реализацию, которую можно было бы в официальные модули добавить. На этом все и застряло. В Питоне мне кажется проще реализовать контракты с помощью декораторов.
Вот @orsinium пишет про контрактное программирование в Питоне:
PyContracts. Условия задаются в своём особом синтаксисе в виде строк. Довольно интересный подход. Позволяет писать условия кратко и ёмко, в виде этаких схем. Правда, как результат, IDE такое не подсветит, да и нормальные схемы (типа marshmallow и PySchemes) без боли не использовать.
Pycontract. Автор этого модуля пошёл ещё дальше и реализовал модуль, который позволяет описывать контракты в docstring'ах, также в своём синтаксисе. Причём он подошёл серьезно и написал PEP с предложением включить это в стандартную библиотеку питона. Если бы это приняли, IDE умела бы это подсвечивать. Но нет. PEP, Модуль и примеры Итоге я перепробовал около 30 модулей для контрактного программирования в виде обычных декораторов, принимающих в качестве контрактов любые функции. Но они все недостаточно хороши. То в качестве исключения поднимают Exception, то не реализуют инвариант, то работают только с какими-то своими сложными интерфейсами валидаторов, без возможности задать обычное lambda-выражение... В общем, встречайте почти идеальный модуль. Возможно, первый, у которого внутренности сделаны в терминах ООП, а не жуткой функциональщины, в которой и автор, вероятно, уже не ориентируется. https://github.com/orsinium/deal
Расскажите про свой опыт использования контрактов при написании кода.