Python中`__builtin__.py`源代码显示内建类dict的`__init__`等方法为pass,dict究竟是如何实现的?

如图,这是 python 内建的类的原代码,一堆 pass,那 dict 的功能靠 pass 实现的?这代码也太魔幻了吧。


Python中`__builtin__.py`源代码显示内建类dict的`__init__`等方法为pass,dict究竟是如何实现的?

15 回复

dict 是通过 C 语言实现的,据我理解,built.py 只是一个 stub 而已


这个问题问得很深入。__builtin__.py 文件(在 Python 3 中是 builtins.py)只是一个“存根”文件,用于文档和 IDE 的代码补全。它里面用 pass 定义的内置函数和类(比如 dict.__init__)只是占位符,真正的实现根本不在这个 Python 文件里。

Python 的内置类型,比如 dict,是用 C 语言实现的(在 CPython 中)。它们的核心逻辑在 CPython 解释器的 C 源代码里,主要是 Objects/dictobject.c 这个文件。这个 C 模块定义了 PyDict_Type 这个类型对象,并实现了 __init____getitem____setitem__ 等所有方法。

简单来说,流程是这样的:

  1. 启动解释器:Python 解释器启动时,C 代码会创建并初始化所有内置类型(包括 dict)。
  2. 暴露给 Python:这些 C 实现的对象被暴露给 Python 运行时环境,成为 builtins 模块里的名字。
  3. 存根文件:你看到的 __builtin__.py 文件只是为了方便。当你在 IDE 里敲 dict. 时,IDE 会读取这个文件来给你显示 __init__keys 等方法名,但实际的代码执行路径会直接跳转到 C 函数。

所以,dict__init__ 等方法在 Python 层面显示为 pass,是因为它们真正的“身体”在 C 语言世界里。如果你想了解 dict 的具体实现细节(比如哈希表的结构、解决冲突的方式等),就需要去阅读 CPython 的 C 源代码。

总结:真正的实现在C源码里,Python文件只是个接口文档。

都说了是 built-in 了……

这个是编辑器生成的假文件

built-in 官方解释是可以随时调用的,没说咋指的是实现方式吧。

这些方法可能是它的抽象基类的抽象方法,必须实现的,然后这里继承了但是不提供实现细节,你可以自己继承实现。我猜的。。

问题是你这个__builtin__.py 只是 pycharm 自带的,并不是 python 自带的,cpython 解析器的文件库中从来就没这个文件

还是老哥稳啊。居然知道是 pycharm。我看了看路径,你是对的,确实是生成的临时文件。
https://stackoverflow.com/questions/24266114/pycharm-what-is-python-stubs 说的比较清楚。

其实文件的开头写了,大概意思就是这个文件是生成的



built-in 的意思就是内建实现,实现细节不会暴露给你,比如 gcc 的一系列 built-in functions。

CPython 的 dict 也确实是在解释器层面实现的,你可以从 CPython 的源码中翻出来 dict 的 C 实现,但是绝对不会看到 Python 写的 dict 实现。

stub 帮助你跳转进去看看结构的. 这个东西想看细节, 只能看源码+文档.

想顺便问一个问题,我自己用 C++ 写了个 Python 的模块,写代码的时候会提示找不到这个模块,有没有办法像这里的 builtin.py 一样自己写个声明?

假如是 3.5 以后的扩展,你可以试试写一个 pyi 文件

回到顶部