考虑以下尝试向函数
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
的“按键”输入?
mypy 现在支持使用 Unpack + TypedDict 注释 **kwargs,根据 PEP 692:https://peps.python.org/pep-0692/