专栏文章 Python `from __future__ import annotations` 有人知道可以用来做什么吗?

simonpatrick · 2023年12月06日 · 最后由 TestNovice 回复于 2023年12月14日 · 7222 次阅读

Python from __future__ import annotations 有人知道可以用来做什么吗?

from __future__ import annotations

from __future__ import annotations

class A:
    def __init__(self, b: B):
        self.b = b

class B:
    def __init__(self, a: A):
        self.a = a

上面这个例子,如果不用from __future__ import annotations就会报错,用了就不报错.

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 3 条回复 时间 点赞

文言一心:
from future import annotations 是一种 Python 的语法,用于支持类型提示在静态类型检查器中的更灵活行为。在 Python 3.7 以后的版本中,这个语法是默认启用的。

在 Python 3.7 之前的版本中,如果你尝试使用类型提示在一个类中引用另一个类,就会出现错误。例如,上面的代码在没有 from future import annotations 的情况下,会在 Python 3.7 之前的版本中报错,因为在这个版本的 Python 中,类型注解不能直接在类定义中使用。

通过使用 from future import annotations,你可以在类型注解中直接引用类,而不需要先导入它们。这使得你可以在类定义内部进行类型注解,而不需要将它们放在类定义的外部。

然而,需要注意的是,from future import annotations 在 Python 3.7 以后的版本中已经不再需要,因为在这个版本及以后的版本中,Python 已经默认启用了更灵活的类型注解行为。因此,如果你在使用 Python 3.7 或更高版本,那么你可以直接使用上面的代码,而不需要 from future import annotations。

望文生义,future 中文意思:未来,将来。
在 Python 中这个模块里的东西主要是为了以后方便维护,提前使用未正式发布的某些特性,所以与版本肯定有关系

貌似是指定类型的。而且类型不是 Python 的内置类型像是 List、Dict 等。你看你的代码里面,参数 a 的类型指明是 B。这种就需要 annotations。我前几天也遇到过这个问题

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册