Я работаю в веб-среде Python, которая использует аннотации типов Python 3 для проверки и внедрения зависимостей.
Поэтому я ищу способ генерации функций с аннотациями типов из параметров, переданных генерирующей функции.:
def gen_fn(args: Dict[str, Any]) -> Callable:
def new_fn(???):
pass
return new_fn
, чтобы
inspect.signature(gen_fn({'a': int}))
вернул
<Signature (a:int)>
Есть ли что-то, что я могу поставить вместо ???
, что будет делать то, что япотребность.
Я также посмотрел на Signature.replace()
в модуле inspect
, но не нашел способа присоединить новую подпись к новой или существующей функции.
Я не решаюсь использовать ast , потому что:
Сам абстрактный синтаксис может меняться с каждым выпуском Python
Так что мой вопрос: Какой (если таковой имеется) разумный способ создания функции с аннотацией типа Python 3 на основе dict
, переданного генерирующей функции?
Редактировать: while @ Aran-Fey решение ответить на мой вопроспрямо, похоже, мое предположение было неверным.Изменение подписи не позволяет звонить на new_fn
с использованием новой подписи.То есть gen_fn({'a': int})(a=42)
вызывает TypeError:
... `получил неожиданный аргумент ключевого слова 'a'.