PyType_Type和PyBaseObject_Type
PyObject和PyTypeObject内容的最后指出下图中对实例对象和类型对象的理解是不完全正确的,

浮点类型对象全局唯一,Python在C语言层面实现过程中将其定义为一个全局静态变量,定义于Object/floatobject.c中,命名为PyFloat_Type。
PyTypeObject PyFloat_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"float",
sizeof(PyFloatObject),
0,
(destructor)float_dealloc, /* tp_dealloc */
// ...
(reprfunc)float_repr, /* tp_repr */
// ...
};
- 第2行使用初始化
ob_refcnt、ob_type以及ob_size三个字段,PyVarObject_HEAD_INIT的定义可以参考博文1.4.3节的内容。 - 第3行将
tp_name字段初始化成类型名称"float" - 再往下是各种操作的函数指针
ob_type指针指向PyType_Type,这也是一个静态定义的全局变量。代表“类型的类型” 的type对象就是PyType_Type。
一. 类型的类型—PyType_Tpye(type的实体)
上文中,float类型对象在底层实现过程中对应PyFloat_Type全局静态变量。Python类型是一种对象,也有自己的类型,即Python中的type。
>>>

本文详细解析了Python中PyType_Type(类型类型)与PyBaseObject_Type(对象基类)的概念,包括它们在C语言实现中的静态变量、类型对象的创建与关系,以及object作为所有类型基石的重要性。
最低0.47元/天 解锁文章
1208





