所有类都需要先定义才能用作类型提示。为了在某些情况下解决这个问题,__future__
import is recommended 。这就是为什么以下代码可以正常工作(在 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 不会对它执行任何操作,因此在任何时候都绝对不会对该名称进行任何解析,因此不会引发任何错误。
关于Python:未知类型提示不会因 __future__ import 引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55729069/