Python中变嵌套字典的类型提示

9

由于我在Python中大量使用类型提示,我遇到了这样一种情况:递归函数接受dict,其键为str,值可为intdict (Dict[str, Union[int, Dict[...]])。但问题在于,可能的dict-值也具有键为str,值可为intdict (Dict[str, Union[int, Dict[Dict[str, Union[int, Dict[...]]]]])。

但是,我不知道传递的字典深度有多少层。是否有可能用类型提示来展示这种重复的模式呢?


这个回答解决了你的问题吗?如何定义一个非类的通用类型? - MisterMiyagi
2
很抱歉,它不行。我的意思是,我的字典可能有从0到无限的深度。因此,基本上我想要的是一种类型提示,可以在某个时候插入自己(在我的示例中为“...”,因为整个提示将重复)。 - 5t4cktr4c3
1个回答

7
渴望的语法类似于:
RecursiveDict = Dict[str, Union['RecursiveDict', int]]

截至目前,MyPy(以及大多数其他Python类型检查器)不支持此语法 - MyPy 错误报告 要求支持递归类型已经开放了6年。然而,一些替代类型检查器最近引入了对递归注释的支持。因此,这是一个有点混杂的情况。
另请参见:
- 在Python中定义递归类型提示? - 递归类型注释

2
根据 https://github.com/python/mypy/pull/13297 的说明,现在已经支持了。 - ניר
@ניר 我仍然无法使答案中的代码工作。 - Max

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接