读 Python behind the scenes #6: how Python object system works

碎碎念:上周六参加了 pycon 2026,令人印象深刻的是:语言特性的分会场有两位高中生嘉宾;最火热的话题是 free threading。但相比 Agent 分会场的座无虚席,这边显得过分冷清,倒是令人嘘唏。
https://tenthousandmeters.com/blog/python-behind-the-scenes-6-how-python-object-system-works/
从第一天学习 Python 开始,我们便知道 Python 中万物皆对象,这篇文章将介绍 Python 对象的实现原理(cpython3.9)。
背景
想象下面的一段代码中在 cpython 中是怎么处理的呢?第一时间映入你脑中的大概率是 __add__() 方法。
def f(x):
return x + 7
然而,实际情况会稍微复杂一点,因为 x 可能是一个类,也可能是一个 builtin type int —— 不会调用任何魔术方法(special methods)。
Python 对象与类型
在追踪源码前,先了解 Python 对象 与 Python 类型 在 cpython 中的定义:
PyObject
typedef struct _object {
_PyObject_HEAD_EXTRA // macro 宏 - 供调试使用
Py_ssize_t ob_refcnt; // 引用计数
PyTypeObject *ob_type; // 对象类型
} PyObject;
float 对象定义的例子:
typedef struct {
PyObject ob_base;
double ob_fval;
} PyFloatObject;
PyTypeObject
万物皆对象的一个好处:VM 不需要去写一堆 if/else 判断类型,直接调用「类型」 PyTypeObject 已经定义的操作执行。
评论
?
参与讨论