2016-10-31 5 views
2

Предположим, что у нас есть функция foo(a, b), которая является частью открытого API модуля python.
Есть ли способ запросить типы a и b, что функция ожидает?
Я знаю, что могу получить количество аргументов и их значения по умолчанию через модуль inspect, но есть ли информация о типе?Есть ли способ получить типы аргументов функций?

+0

Нет, не по умолчанию. Вы должны доверять своим программистам или как можно раньше в своей функции. Кроме того, документируйте свой общедоступный API. – jbndlr

+0

Проверьте docstring функции с 'foo .__ doc__'. У этой информации должна быть информация, которую вы ищете, но нет никакой гарантии. Проблема в том, что Python не приводит переменные к определенному типу. Таким образом, вы можете попытаться передать строку в 'sqrt', например, и ничто не приведет к ошибке до времени выполнения. –

ответ

6

Python - динамически типизированный язык, поэтому нет; функция должна документы их ожидания вместо этого.

Python 3.5 и более новая поддержка optional type hinting; если библиотека использует подсказки типов, вы можете запросить эту информацию с помощью typing.get_type_hints() function для доступа к этой информации программно.

Как правило, функции Python должны принимать объекты, реализующие ожидаемые функциональные возможности, а не конкретные типы. Если ваша функция выполняет повторную последовательность для извлечения строк, она должна быть документирована как принятие (в терминах типа намека) объекта Iterable[str], а не списка или кортежа или другого определенного типа.

+2

Кроме того, это не * тип * аргумента, а его доступные/реализованные * методы *, которые делают его подходящим как аргумент для конкретной функции, так как python использует ** утиную печать **. – jbndlr

Смежные вопросы