我知道python中的所有东西都是一个对象,并且这些对象的“类型”(或类)是“类型”。加上类型的类型也是类型本身。(正如这里很好解释的那样)
我不明白的是这个循环引用是如何实现的?所以我看这里。引用可能解释我正在寻找的部分:
PyTypeObject* PyObject.ob_type
这是类型的类型,也就是它的元类型。它由 PyObject_HEAD_INIT 宏的参数初始化,其值通常应为 &PyType_Type。但是,对于必须(至少)在 Windows 上可用的动态可加载扩展模块,编译器会抱怨这不是有效的初始化程序。因此,约定是将 NULL 传递给 PyObject_HEAD_INIT 宏,并在模块初始化函数开始时显式初始化此字段,然后再执行其他任何操作。这通常是这样完成的:
Foo_Type.ob_type = &PyType_Type;
由于 C 不是基于 OOP 的,我知道当一个人创建一个类时,它可以有一个属性来指向对象本身作为它自己的类。我确信我在这里缺乏理解导致我处于困惑状态,任何人都可以指出这是否是其他脚本语言或某种模式设计中的常见做法,如果有人可以对此有所了解,我会很感激的。
编辑:我在这里发现:
PyObject* PyType_Type
这是类型对象的类型对象;它与 Python 层中的 type 和 types.TypeType 是同一个对象。
那个怎么样?