类型对象¶
-
type PyTypeObject¶
用于描述内置类型的对象的C结构。
-
unsigned int PyType_ClearCache()¶
清除内部查找缓存。返回当前版本标记。
-
unsigned long PyType_GetFlags(PyTypeObject *type)¶
返回
tp_flags成员 type . 此函数主要用于 Py_LIMITED_API ;单个标志位保证在整个Python版本中都是稳定的,但是可以访问tp_flags它本身不是受限API的一部分。3.2 新版功能.
在 3.4 版更改: 返回类型现在为
unsigned long而不是long.
-
void PyType_Modified(PyTypeObject *type)¶
使类型及其所有子类型的内部查找缓存无效。必须在手动修改类型的属性或基类之后调用此函数。
-
int PyType_HasFeature(PyTypeObject *o, int feature)¶
如果类型对象为 o 设置功能 特征 . 类型特征由单个位标志表示。
-
int PyType_IS_GC(PyTypeObject *o)¶
如果类型对象包含对循环检测器的支持,则返回true;这将测试类型标志
Py_TPFLAGS_HAVE_GC.
-
int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)¶
返回true if a 是一个subtype b .
此函数只检查实际的子类型,这意味着
__subclasscheck__()未被调用 b . 调用PyObject_IsSubclass()做同样的检查issubclass()会的。
-
PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)¶
- Return value: New reference.
的一般处理程序
tp_alloc类型对象的槽。使用python的默认内存分配机制来分配新实例并将其所有内容初始化为NULL.
-
PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)¶
- Return value: New reference.
-
int PyType_Ready(PyTypeObject *type)¶
完成类型对象。这应该在所有类型对象上调用,以完成初始化。此函数负责添加从类型的基类继承的槽。返回
0成功或回来-1并在出错时设置异常。
-
void *PyType_GetSlot(PyTypeObject *type, int slot)¶
返回存储在给定槽中的函数指针。如果结果是
NULL,这表示插槽NULL或者使用无效参数调用了函数。调用方通常会将结果指针强制转换为适当的函数类型。见
PyType_Slot.slot对于 slot 参数。3.4 新版功能.
在 3.10 版更改:
PyType_GetSlot()现在可以接受所有类型。以前,它仅限于堆类型。
-
PyObject *PyType_GetModule(PyTypeObject *type)¶
使用创建类型时返回与给定类型关联的模块对象
PyType_FromModuleAndSpec().如果没有模块与给定类型关联,则设置
TypeError回报NULL.此函数通常用于获取定义方法的模块。注意在这种方法中,
PyType_GetModule(Py_TYPE(self))可能无法返回预期结果。Py_TYPE(self)可能是 子类 和子类不必定义在同一个模块中作为它们的超类。看到了吗PyCMethod获取定义方法的类。3.9 新版功能.
-
void *PyType_GetModuleState(PyTypeObject *type)¶
返回与给定类型关联的模块对象的状态。这是打电话的捷径
PyModule_GetState()关于结果PyType_GetModule().如果没有模块与给定类型关联,则设置
TypeError回报NULL.如果 type 具有关联的模块,但其状态为
NULL回报NULL没有设置例外。3.9 新版功能.
创建堆分配类型¶
以下函数和结构用于创建 heap types .
-
PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)¶
- Return value: New reference.
Creates and returns a heap type object from the spec (
Py_TPFLAGS_HEAPTYPE).这个 基地 参数可用于指定基类;它可以只是一个类,也可以是类的元组。如果 基地 是
NULL,即 Py_tp_bases 改为使用插槽。如果这也是NULL,即 Py_tp_base 改为使用插槽。如果这也是NULL,新类型派生自object。这个 模块 参数可用于记录在其中定义新类的模块。它必须是模块对象或
NULL. 如果没有NULL,该模块与新类型关联,以后可以使用PyType_GetModule(). 关联的模块不是由子类继承的;必须为每个类单独指定它。此函数调用
PyType_Ready()在新类型上。3.9 新版功能.
在 3.10 版更改: 该函数现在接受单个类作为 基地 论证和
NULL作为tp_doc插槽。
-
PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)¶
- Return value: New reference.
相当于
PyType_FromModuleAndSpec(NULL, spec, bases).3.3 新版功能.
-
PyObject *PyType_FromSpec(PyType_Spec *spec)¶
- Return value: New reference.
相当于
PyType_FromSpecWithBases(spec, NULL).
-
type PyType_Spec¶
定义类型行为的结构。
-
const char *PyType_Spec.name¶
类型的名称,用于设置
PyTypeObject.tp_name.
-
int PyType_Spec.basicsize¶
-
int 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}}.
-
const char *PyType_Spec.name¶
-
type PyType_Slot¶
定义类型的可选功能的结构,包含槽ID和值指针。
-
int PyType_Slot.slot¶
插槽ID。
插槽ID的命名与结构的字段名类似
PyTypeObject,PyNumberMethods,PySequenceMethods,PyMappingMethods和PyAsyncMethods添加了Py_前缀。例如,使用:Py_tp_deallocto setPyTypeObject.tp_deallocPy_nb_addto setPyNumberMethods.nb_addPy_sq_lengthto setPySequenceMethods.sq_length
以下字段不能使用
PyType_Spec和PyType_Slot:tp_dictoffset(见 PyMemberDef )
无法使用设置以下字段
PyType_Spec和PyType_Slot在有限的API下:设置
Py_tp_bases或Py_tp_base在某些平台上可能存在问题。若要避免问题,请使用 基地 论证PyType_FromSpecWithBases()取而代之的是。在 3.9 版更改: 插槽
PyBufferProcs可以在无限API中设置。
-
void *PyType_Slot.pfunc¶
槽的所需值。在大多数情况下,这是指向函数的指针。
插槽不是
Py_tp_doc可能不是NULL。
-
int PyType_Slot.slot¶