PyObject与PyTypeObject的区别

6

我试图构建一个Python-C接口,但是当我查看源代码时,PyObjectPyTypeObject让我感到困惑。请问这两者之间有什么区别?如果能提供一个示例就更好了。


2
在 object.h 头文件中有一些很棒的文档:https://github.com/python/cpython/blob/master/Include/object.h - S.S. Anne
1
请参见实际文档: https://docs.python.org/3/c-api/typeobj.html 和 https://docs.python.org/3/c-api/object.html - S.S. Anne
1个回答

1

简而言之

  • PyObject 是 Python 中 object 的类比
  • PyTypeObject 是 Python 中 type 的类比

让我们查看关于 PyTypeObjectdocs

用于描述内置类型的对象的 C 结构。

这相当于 Python 中 type 的实例作为 。它包含有关类型本身的信息(例如,类型名称、文档字符串、构造函数等)。

现在让我们查看关于 PyObjectdocs

所有对象类型都是此类型的扩展....

这意味着您可以将任何对象引用为 PyObject* 指针。例如:

PyObject *some_number = PyLong_FromLong(42);

在正常的“发布”版本中,它仅包含对象的引用计数和指向相应类型对象的指针,正如粗体部分所述。正如粗体部分所说,所有PyObject都包含指向该对象类型的指针,该指针是一个PyTypeObject
在上面的示例中,some_number具体是一个PyLongObject(表示Python整数对象),表示整数类型本身的结构是PyLong_Type(从some_number->ob_type获得)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接