键入注释稍后定义的 class (前向参考)

Type annotating a class that is defined later (Forward Reference)

出于样式原因,我试图在 class Foo 之前保留 myDict 的定义。这将导致 NameError 因为 Foo 尚未定义。

from typing import Dict

myDict: Dict[str, Foo] = {}

class Foo:
    pass

将 myDict 移到 Foo 下面显然可以解决这个问题,但是有什么办法可以让 myDict 及其注释保持在最上面吗?

您可以这样引用:

from typing import Dict

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

class Foo:
    pass

有关详细信息,请参阅 https://www.python.org/dev/peps/pep-0484/#forward-references

根据 python (Py3.7+) 上的哪个版本,你 运行 你可以:

from __future__ import annotations

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