Type Objects

  • PyTypeObject

    • 用于描述内置类型的对象的 C 结构。
  • PyObject* PyType_Type

    • 这是类型对象的类型对象。它与 Python 层中的type是同Pair象。
  • int PyType_Check(PyObject ** o *)

    • 如果对象* o *是类型对象,包括从标准类型对象派生的类型的实例,则返回 true。在其他所有情况下,返回 false。
  • int PyType_CheckExact(PyObject ** o *)

    • 如果对象* o *是类型对象,但不是标准类型对象的子类型,则返回 true。在其他所有情况下,返回 false。
  • unsigned int PyType_ClearCache()

    • 清除内部查找缓存。返回当前版本标签。
  • 无符号长PyType_GetFlags(PyTypeObject * * type *)

    • 返回* type *的tp_flags成员。该函数主要用于 Py_LIMITED_API;保证各个标志位在整个 Python 版本中都是稳定的,但是对tp_flags本身的访问不是受限制的 API 的一部分。

3.2 版中的新Function。

在版本 3.4 中更改:返回类型现在为unsigned long而不是long

  • 无效PyType_Modified(PyTypeObject *类型)

    • 使类型及其所有子类型的内部查找缓存无效。在手动修改类型的属性或 Base Class 后,必须调用此函数。
  • int PyType_HasFeature(PyTypeObject ** o *,int * feature *)

    • 如果类型对象* o 设置Function feature *,则返回 true。类型 Feature 由单个位标志表示。
  • int PyType_IS_GC(PyTypeObject ** o *)

    • 如果类型对象包括对循环检测器的支持,则返回 true;否则,返回 true。这将测试类型标志Py_TPFLAGS_HAVE_GC
  • 整数PyType_IsSubtype(PyTypeObject *a PyTypeObject b *)

    • 如果* a b *的子类型,则返回 true。

此函数仅检查实际的子类型,这意味着不会在* b *上调用subclasscheck()。呼叫PyObject_IsSubclass()进行与issubclass()相同的检查。

  • PyObject * PyType_GenericAlloc(PyTypeObject ** type *,Py_ssize_t * nitems *)
    • 返回值:新参考.

类型对象的tp_alloc插槽的通用处理程序。使用 Python 的默认内存分配机制分配新实例,并将其所有内容初始化为NULL

类型对象的tp_new插槽的通用处理程序。使用类型的tp_alloc插槽创建一个新实例。

  • int PyType_Ready(PyTypeObject *类型)

    • 完成一个类型对象。应该在所有类型对象上调用它以完成其初始化。该函数负责从类型的 Base Class 添加继承的插槽。成功返回0,或者返回-1并设置错误异常。
  • void * PyType_GetSlot(PyTypeObject ** type *,int * slot *)

    • 返回存储在给定插槽中的函数指针。如果结果为NULL,则表明插槽为NULL,或者使用无效参数调用了该函数。调用者通常会将结果指针转换为适当的函数类型。

请参阅PyType_Slot.slot以获取* slot *参数的可能值。

如果* type *不是堆类型,则会引发异常。

3.4 版的新Function。

创建堆分配类型

以下函数和结构用于创建heap types

从* spec *(Py_TPFLAGS_HEAPTYPE)创建并返回一个堆类型对象。

如果* bases *是一个 Tuples,则创建的堆类型包含其中包含的所有类型作为基本类型。

如果* base NULL,则使用 Py_tp_base *插槽。如果它也是NULL,则新类型从object派生。

此函数在新类型上调用PyType_Ready()

版本 3.3 中的新Function。

等效于PyType_FromSpecWithBases(spec, NULL)

如果未设置Py_TPFLAGS_HEAPTYPE标志,则PyType_FromSpecWithBases()自动进行设置。

  • PyType_Slot * PyType_Spec.slots

    • PyType_Slot结构的数组。以特殊广告位值{0, NULL}终止。
  • PyType_Slot

    • 定义类型的可选Function的结构,其中包含插槽 ID 和值指针。
  • int PyType_Slot.slot

    • 插槽 ID。

插槽 ID 的名称类似于结构PyTypeObjectPyNumberMethodsPySequenceMethodsPyMappingMethodsPyAsyncMethods的字段名,并带有Py_前缀。例如,使用:

不能使用PyType_SpecPyType_Slot设置以下字段:

在某些平台上,设置Py_tp_bases可能会出现问题。为避免出现问题,请改用PyType_FromSpecWithBases()的* bases *参数。

  • 无效* PyType_Slot.pfunc
    • 插槽的期望值。在大多数情况下,这是指向函数的指针。

可能不是NULL