В качестве отложенного ответа некоторые из моих пакетов (marrow.script, WebCore и т. Д.) Используют аннотации, где они доступны, для объявления типов (например, преобразование входящих значений из Интернета, определение аргументов, являющихся булевыми переключателями и т. Д.) ), а также выполнить дополнительную разметку аргументов.
Marrow Script создает полный интерфейс командной строки для произвольных функций и классов и позволяет задавать значения по умолчанию для документации, приведения и обратного вызова, используя аннотации, с декоратором для поддержки более старых сред выполнения. Все мои библиотеки, которые используют аннотации, поддерживают формы:
any_string # documentation
any_callable # typecast / callback, not called if defaulting
(any_callable, any_string) # combination
AnnotationClass() # package-specific rich annotation object
[AnnotationClass(), AnnotationClass(), …] # cooperative annotation
«Голая» поддержка строк документации или функций ввода типов позволяет легче смешивать их с другими библиотеками, поддерживающими аннотации. (Т.е. есть веб-контроллер, использующий приведение типов, который также отображается как сценарий командной строки.)
Отредактировано, чтобы добавить: Я также начал использовать пакет TypeGuard , используя для проверки утверждения времени разработки. Преимущество: при запуске с включенной «оптимизацией» (-O
/ PYTHONOPTIMIZE
env var) проверки, которые могут быть дорогостоящими (например, рекурсивными), опускаются, поскольку предполагается, что вы должным образом протестировали свое приложение в процессе разработки, поэтому проверки должно быть ненужным в производстве.