在Python类型别名中使用“type”关键字的优点

问题描述 投票:0回答:1

在 python 3.12 之前,我的理解是

mta = int
行创建了一个名为
mta
的类型别名,但在 3.12 中,该行可以(应该?)写为
type mta = int
,即使仍然支持先前的语法。但这些是不可互换的。例如,
isinstance
将接受第一个作为合法的第二个参数,但第二个将失败。 (似乎在第二种情况下,
isinstance(3, mta.__value__)
有效,但这似乎很尴尬。)

我阅读本文档的意思是,这两种语法都受支持以实现向后兼容性,而不是说它们在功能上有所不同。鉴于这种行为,什么时候使用

type
关键字比较有利?是否存在简单(3.12 之前)分配效果较差的情况?

例如:

>>> mta = int
>>> isinstance(3, mta)
True
>>> type mta = int
>>> isinstance(3, mta)
...
TypeError: isinstance arg 2 must be a type, a tuple of types, or a union
python python-3.x
1个回答
0
投票

正如之前在其他人关于此问题的注释中所述,根据 PEP 695

type
- 语句别名旨在提供:

  • 更好的泛型类型参数语法,
  • 类型别名的惰性求值,
  • 更好地区别普通变量(尽管
    TypeAlias
    也提供了这一点)。

值得注意的是,正如您所指出的,不仅

type
语句不能完全替代
TypeAlias
式别名,而且它们很可能从未被有意取代。这是否是一个设计错误已经引起了激烈的争论,包括here(这个线程有一些很好的见解)。

© www.soinside.com 2019 - 2024. All rights reserved.