PEP 294 – types 模块中的类型名称
- 作者:
- Oren Tirosh <oren at hishome.net>
- 状态:
- 已拒绝
- 类型:
- 标准跟踪
- 创建日期:
- 2002年6月19日
- Python 版本:
- 2.5
- 发布历史:
摘要
本 PEP 提议,应将与类型名称匹配的符号添加到 types 模块中,以适用于 types 模块中的所有基本 Python 类型。
types.IntegerType -> types.int
types.FunctionType -> types.function
types.TracebackType -> types.traceback
...
types 模块中目前使用的长命名将弃用。
通过此更改,types 模块可以替代 new 模块。new 模块将被弃用,并列在 PEP 4 中。
声明
集中存储类型名称是一个错误。“types”和“new”模块都不应延续到 Python 3.0。
在此期间,对模块进行提议的更新没有意义。这会造成中断,而没有任何补偿收益。
相反,内部类型(帧、函数等)在这些模块之外不存在的问题,可以通过将它们添加到 __builtin__ 或 sys 中来解决。这将为 Python 3.0 提供更平稳的过渡。
基本原理
为相同的对象使用两组名称是多余且令人困惑的。
在 2.2 之前的 Python 版本中,许多类型名称的符号都被这些类型的工厂函数占用。现在所有基本类型都已与其工厂函数统一,因此类型名称可以一致地用于引用类型对象。
大多数类型都可以作为内置类型或在 new 模块中访问,但某些类型(如 traceback 和 generator)只能通过 types 模块以与类型名称不匹配的名称访问。本 PEP 提供了一种统一的方法,通过一组单一的名称访问所有基本类型。
规范
types 模块应通过以下测试:
import types
for t in vars(types).values():
if type(t) is type:
assert getattr(types, t.__name__) is t
“class”、“instance method”和“dict-proxy”这些类型已重命名为有效的 Python 标识符“classobj”、“instancemethod”和“dictproxy”,从而使这成为可能。
向后兼容性
由于其广泛使用,目前不打算在未来的某个版本中实际从 types 模块中移除长名称。但是,应在文档和库源代码中更改长名称,以劝阻在新代码中使用它们。
参考实现
参考实现可在 issue #569328 中找到。
版权
本文档已置于公共领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0294.rst