我尝试在 Python 中通过 MyPy 使用类型别名时遇到错误。这是我的代码的简化版本:
type IntList = list[int] # This line causes the error
type OtherType = int # This line causes the error
class test:
pass
type SomeType = test # This line causes the error
我使用的是 Python 3.12,据说它支持 PEP 695 类型别名。我是否做错了什么,缺少导入,或者 Mypy 对 PEP 695 的支持不完整?
编辑: 如果我这样做的话,看起来我不会从 MyPy 中得到任何错误。
IntList: TypeAlias = list[int]
OtherType: TypeAlias = int
class test:
pass
SomeType: TypeAlias = test
这是因为Python 3.9+中的选项吗?
PEP 695 未在 mypy 中实现<=1.10 yet (as the error message tries to say), the issue tracking that is here: https://github.com/python/mypy/issues/15238
因此,您可以在 Python 3.12 中使用
type x = y
并且解释器将可以工作,但使用任何现有版本的 mypy 检查类型将不起作用。
请注意,即使在最新的 mypy 中实现它,在 Python 3.11 上运行的 mypy 也可能不支持它。所以这个别名语法不会用在任何承诺支持 3.11 的地方。 向后兼容的代码需要使用旧样式或
TypeAliasType
(自 1.10 起在 mypy 中受支持)。
更新(2024 年 5 月):大量支持刚刚添加到主分支,可能会在 mypy 1.11 中发布。它仍然不完整,但更接近它(问题中的代码都有效)。它可能需要--enable-incomplete-feature=NewGenericSyntax
(但该标志在1.10.0中尚不存在,并且在1.11.0+dev中不需要)。