Python:未知类型提示不会引发 __future__ 导入的异常

Python: Unknown type hint does not raise exception with __future__ import

所有 类 都需要先定义,然后才能用作类型提示。为了在某​​些情况下绕过它,__future__ 导入 。这就是以下代码工作正常的原因(在 Python 3.7 中):

from __future__ import annotations


class Person:
    def get_relative(name: str) -> Person:
        ...

如果没有 __future__ 导入,它将引发 NameError。但是这段代码也能正常工作:

from __future__ import annotations


class Person:
    def get_relative(name: BlahBlahTypoWhatever) -> Person:
        ...

我期待 NameError: name 'BlahBlahTypoWhatever' is not defined。这是预期的行为吗?

Python 本身不做任何类型检查,所以它不会引发任何关于错误类型的错误。

annotations future 只是隐式地将所有注释更改为字符串,即这等价于:

from __future__ import annotations

def foo(bar: Baz): pass
def foo(bar: 'Baz'): pass

由于您的注释现在是一个字符串,并且 Python 不会对其进行任何操作,因此绝对不会在任何时候解析该名称,因此不会引发任何错误。