PyObject对象机制的基石
学过Python的人应该很清楚,Python中一切都是对象,所有的对象都有一个共同的基类,对于本篇博文来说,一切皆是对象则是探索Python的对象机制的一个入口点.我假设读者在阅读本文的时候已经下载Python(Python-2.7.11)的源码,并且已经解压进入了源码的根目录下.众所周知Python是用C实现的,C是一种OO的语言,而Python是一个OOP的语言,那么如何在C语言层面实现OOP,实现多态,这是一个有意思的话题,这也是本文需要进行探索的点.Python内部使用了一个PyObject
结构体来保存所有对象共同的数据成员,以及实现GC机制所需要的一些辅助字段等.所以可以说PyObject
就是Python对象机制的基石,这毫不为过.那么让我们进入到源码中.透过源码看看Python中的对象到底是个啥?
PyObject对象
typedef struct _object {
PyObject_HEAD
} PyObject;
./Include/object.h
异常的简单,这一切都要归功于PyObject_HEAD
宏,C语言中的宏是把双刃剑.看看PyObject_HEAD
长什么样吧
#define PyObject_HEAD \
_PyObject_HEAD_EXTRA \
Py_ssize_t ob_refcnt; \
struct _typeobject *ob_type;
./Include/object.h
初看起来,还是不容易理解的,不过经验告诉我_PyObject_HEAD_EXTRA
这个宏可以不用管,因为这是以下划线开头的,