`from typing`与`from collections.abc`在标准原始类型注解中的比较?

3 投票
1 回答
53 浏览
提问于 2025-04-14 16:29

我在看标准库的文档,发现from typing import Sequence其实是在后台调用collections.abc

最开始的时候,有一些警告和错误提示,建议大家从collections包迁移到collections.abc,这是因为一些抽象类的变化。可以在这里查看。不过现在这些抽象类已经在新的位置稳定下来了,那么使用这两者中的任何一个都可以吗?我在代码库中看到from collections.abc import [etc],我在想,做类型注解的时候,直接从typing导入是不是更方便呢?

Cython 源代码: Sequence = _alias(collections.abc.Sequence, 1)

1 个回答

3

不过,现在这些抽象概念已经放在了一个新的地方,使用其中任何一个可以吗?

最好不要这样做。文档上特别说明:

class typing.Sequence(Reversible[T_co], Collection[T_co])

这是一个已经不推荐使用的别名,指向 collections.abc.Sequence。

自3.9版本以来就不推荐使用:collections.abc.Sequence 现在支持下标访问(即使用 [])。

如果它被标记为不推荐使用,可能在以后的Python版本中会被删除。所以建议使用 collections.abc 的通用类。

撰写回答