如何实现Python数据模型层级结构:解决type与object循环依赖问题
关于Python数据模型层级循环问题的解答
这两个问题本质上都是CPython解释器底层初始化阶段的特殊实现逻辑,和普通Python代码的运行规则不一样:
问题1:type是自身实例的实现逻辑
这个是解释器底层硬编码完成的,不走普通的类实例化流程。
普通类的实例的__class__属性会指向对应的类,但是type作为所有类的元类,是Python类型系统的起点,不可能用正常逻辑生成自身的实例,所以CPython在初始化阶段直接把type对象结构体里的ob_type字段(对应Python层的__class__属性)指向了自己,所以你在Python层验证type.__class__ == type是成立的。
问题2:object和type循环依赖的落地逻辑
你观察到的循环确实存在,普通Python代码里不可能实现「A继承B,同时B是A的实例」这种逻辑,所以这俩核心类也是解释器启动时手动创建的,步骤大概是:
- 先在C层面申请内存生成
object类型的结构体,暂时不设置它的类属性和父类属性 - 再申请内存生成
type类型的结构体,同样暂时不设置相关属性 - 手动把
type结构体的父类指针指向object,满足「所有类都是object子类」的规则 - 再手动把
object结构体的类指针指向type,满足「所有类都是type的实例」的规则 - 最后补全两个类型的其他属性、方法实现,完成初始化
相当于这俩是Python类型系统的「初始根节点」,是解释器用底层代码硬拼出来的,不遵守上层Python语法的实例化、继承规则,所以不会有循环创建的冲突。
内容的提问来源于stack exchange,提问作者Ehsan Sh
相关产品推荐
相关产品推荐

