递归类型注释

时间:2018-12-05 18:55:17

标签: python python-3.x typing

我正在尝试在我的代码库中引入适用的静态类型注释。一种情况是,当读取JSON时,生成的对象将是由字符串作为键的字典,其值是以下类型之一:

  • bool
  • str
  • float
  • int
  • list
  • dict

但是,上面的listdict可以包含相同类型的字典,从而导致递归定义。这在Python3的类型结构中可以表示吗?

1 个答案:

答案 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]可能是解决之道。