PEP 294 – types 模块中的类型名称
- 作者:
- Oren Tirosh <oren at hishome.net>
- 状态:
- 已拒绝
- 类型:
- 标准跟踪
- 创建:
- 2002年6月19日
- Python 版本:
- 2.5
- 历史记录:
摘要
本 PEP 建议为 types 模块中所有基本 Python 类型在 types 模块中添加与类型名称匹配的符号。
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 模块中删除长名称。但是,应在文档和库源代码中更改长名称,以阻止在新代码中使用它们。
参考实现
参考实现可在 问题 #569328 中找到。
版权
本文档已进入公有领域。
来源:https://github.com/python/peps/blob/main/peps/pep-0294.rst
上次修改时间:2023年9月9日 17:39:29 GMT