Python内部机制-PyObject对象

本文探讨Python对象机制,尤其是PyObject作为所有对象的基类,以及PyVarObject在可变对象中的作用。通过源码分析,解释了Python如何在C语言层面实现对象和多态,并讨论了对象的内存布局和引用计数。同时,文章通过实例验证了对象大小的计算。
摘要由CSDN通过智能技术生成

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这个宏可以不用管,因为这是以下划线开头的,

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值