On this page
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 *)
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。
- PyObject *
PyType_GenericNew(PyTypeObject *type ,PyObject args *,PyObject ** kwds *)- 返回值:新参考.
类型对象的tp_new插槽的通用处理程序。使用类型的tp_alloc插槽创建一个新实例。
int
PyType_Ready(PyTypeObject *类型)- 完成一个类型对象。应该在所有类型对象上调用它以完成其初始化。该函数负责从类型的 Base Class 添加继承的插槽。成功返回
0,或者返回-1并设置错误异常。
- 完成一个类型对象。应该在所有类型对象上调用它以完成其初始化。该函数负责从类型的 Base Class 添加继承的插槽。成功返回
void *
PyType_GetSlot(PyTypeObject ** type *,int * slot *)- 返回存储在给定插槽中的函数指针。如果结果为
NULL,则表明插槽为NULL,或者使用无效参数调用了该函数。调用者通常会将结果指针转换为适当的函数类型。
- 返回存储在给定插槽中的函数指针。如果结果为
请参阅PyType_Slot.slot以获取* slot *参数的可能值。
如果* type *不是堆类型,则会引发异常。
3.4 版的新Function。
创建堆分配类型
以下函数和结构用于创建heap types。
- PyObject *
PyType_FromSpecWithBases(PyType_Spec *spec ,PyObject bases *)- 返回值:新参考.
从* spec *(Py_TPFLAGS_HEAPTYPE)创建并返回一个堆类型对象。
如果* bases *是一个 Tuples,则创建的堆类型包含其中包含的所有类型作为基本类型。
如果* base 为NULL,则使用 Py_tp_base *插槽。如果它也是NULL,则新类型从object派生。
此函数在新类型上调用PyType_Ready()。
版本 3.3 中的新Function。
- PyObject *
PyType_FromSpec(PyType_Spec ** spec *)- 返回值:新参考.
等效于PyType_FromSpecWithBases(spec, NULL)。
PyType_Spec- 定义类型行为的结构。
const char *
PyType_Spec.name- 类型的名称,用于设置PyTypeObject.tp_name。
int
PyType_Spec.basicsizeint
PyType_Spec.itemsize- 实例的大小(以字节为单位),用于设置PyTypeObject.tp_basicsize和PyTypeObject.tp_itemsize。
int
PyType_Spec.flags- 键入标志,用于设置PyTypeObject.tp_flags。
如果未设置Py_TPFLAGS_HEAPTYPE标志,则PyType_FromSpecWithBases()自动进行设置。
PyType_Slot *
PyType_Spec.slots- PyType_Slot结构的数组。以特殊广告位值
{0, NULL}终止。
- PyType_Slot结构的数组。以特殊广告位值
PyType_Slot- 定义类型的可选Function的结构,其中包含插槽 ID 和值指针。
int
PyType_Slot.slot- 插槽 ID。
插槽 ID 的名称类似于结构PyTypeObject,PyNumberMethods,PySequenceMethods,PyMappingMethods和PyAsyncMethods的字段名,并带有Py_前缀。例如,使用:
Py_tp_dealloc设置PyTypeObject.tp_deallocPy_nb_add设置PyNumberMethods.nb_addPy_sq_length设置PySequenceMethods.sq_length
不能使用PyType_Spec和PyType_Slot设置以下字段:
tp_print
在某些平台上,设置Py_tp_bases可能会出现问题。为避免出现问题,请改用PyType_FromSpecWithBases()的* bases *参数。
- 无效*
PyType_Slot.pfunc- 插槽的期望值。在大多数情况下,这是指向函数的指针。
可能不是NULL。