如何查找Python内置类src与_string模块的CPython实现源码
Python内置类、C扩展模块源码查找流程
你搜索不到对应内容的核心原因是:你要找的
src内置类、_string模块均为C语言实现的CPython底层组件,没有纯Python的.py实现文件,也不会出现class 类名(的Python语法定义。
第一步:先判断目标的实现类型
执行以下代码可快速区分:
# 替换为你要查找的模块/类 import _string print(_string.__file__)
- 输出后缀为
.py:属于纯Python实现,源码在cpython/Lib/目录下直接搜索即可 - 输出后缀为
.so/.pyd/.dll:属于C实现的扩展/内置组件,按以下步骤查找
第二步:C实现组件的查找方法
查找C扩展模块(比如_string)
所有C扩展模块的源码都存放在cpython/Modules/目录下,命名规则一般为[模块名]module.c:
- 你要找的
_string模块直接打开cpython/Modules/_string.c即可查看全部实现
查找内置类的方法实现(比如__contains__)
所有内置类的实现都存放在cpython/Objects/目录下,按对应类型命名文件,比如字符串类对应unicodeobject.c、列表对应listobject.c、字典对应dictobject.c:
- 内置类的特殊方法在C层有固定的映射关系,
__contains__对应sq_contains/mp_contains函数指针,你可以在对应类型的C文件中搜索该关键词,直接定位到实现代码 - 如果你不清楚类对应的C文件名,可以在
cpython/Objects/目录下全局搜索类名+PyTypeObject关键词,即可定位到类的定义位置
补充搜索技巧
如果全局搜索不到对应类名,优先检查builtins.pyi里的类名是不是类型别名/stub文件的自定义命名,再去对应类型的C文件中找实际实现即可。
内容的提问来源于stack exchange,提问作者ajvbun
相关产品推荐
相关产品推荐

