对稍后定义的类进行类型注释(前向参考)

raw*_*ang 9 python annotations python-3.x

出于风格原因,我尝试将 myDict 的定义保留在 Foo 类之前。这将导致 NameError 因为 Foo 尚未定义。

from typing import Dict

myDict: Dict[str, Foo] = {}

class Foo:
    pass
Run Code Online (Sandbox Code Playgroud)

将 myDict 移到 Foo 下方显然可以解决此问题,但是有什么方法可以将 myDict 及其注释保留在顶部吗?

ACh*_*ion 15

根据您运行的 python (Py3.7+) 版本,您可以:

from __future__ import annotations
Run Code Online (Sandbox Code Playgroud)

然后你的代码按原样运行。PEP 563引入了注释的延迟评估,这意味着您不需要使用将类型放在引号中的原始方法,例如'Foo'


Ken*_*ama 11

您可以引用如下:

from typing import Dict

myDict: Dict[str, 'Foo'] = {}

class Foo:
    pass
Run Code Online (Sandbox Code Playgroud)

请参阅https://www.python.org/dev/peps/pep-0484/#forward-references了解更多信息。