我正在尝试在我的代码库中引入适用的静态类型注释。一种情况是,当读取JSON时,生成的对象将是由字符串作为键的字典,其值是以下类型之一:
bool
str
float
int
list
dict
但是,上面的list
和dict
可以包含相同类型的字典,从而导致递归定义。这在Python3的类型结构中可以表示吗?
答案 0 :(得分:1)
从mypy 0.641开始,mypy不支持您要查找的那种递归类型注释。自然语法:
from typing import Union, Dict, List
JSONVal = Union[None, bool, str, float, int, List['JSONVal'], Dict[str, 'JSONVal']]
d: JSONVal = {'a': ['b']}
产生错误,报告缺少递归类型支持:
$ mypy asdf.py
asdf.py:3: error: Recursive types not fully supported yet, nested types replaced with "Any"
另请参阅mypy issue tracker thread关于递归类型的支持。
就目前而言,Dict[str, Any]
可能是解决之道。