键入注释稍后定义的 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'
.
出于样式原因,我试图在 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'
.