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

A7B8DA89-597C-4297-BC23-E4CC882BA89C_1_105_c

碎碎念:上周六参加了 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 已经定义的操作执行。

添加评论
点赞收藏
点踩分享查看原文
评论
?
参与讨论