Python & MyPy - передача Kwargs сложным функциям - PullRequest
2 голосов
/ 16 марта 2019

Рассмотрим следующую попытку добавления подсказок типа в функции 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?

...