Python и MyPy — Передача Kwargs в сложные функции

#python-3.5 #mypy #type-hinting

#python-3.5 #mypy #подсказка типа

Вопрос:

Рассмотрим следующую попытку добавления подсказок типа к функциям parent и child :

 def parent(*, a: Type1, b: Type2):
    ...

def child(*, c: Type3, d: Type4, **kwargs):
    parent(**kwargs)
    ...
  

MyPy жалуется, что kwargs имеет тип Dict[str, Any] , но аргументы a и b требуют Type1 и Type2 соответственно.

Я понимаю, что решение этой ошибки заключается в переписывании child следующим образом:

 def child(*, a: Type1, b: Type2, c: Type3, d: Type4, **kwargs):
    parent(a=a, b=b)
    ...
  

Однако что, если список аргументов parent намного длиннее, или есть функция grandchild , которая имеет свой собственный список аргументов и должна вызываться child . Требуется ли вам перечислять аргументы и их типы из всех нижестоящих функций? Или есть изящный способ обрабатывать ввод «по ключу» **kwargs ?

Комментарии:

1. Это также было опубликовано в MyPy на GitHub: github.com/python/mypy/issues/6552