类型对象¶
-
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_dealloc
to setPyTypeObject.tp_dealloc
Py_nb_add
to setPyNumberMethods.nb_add
Py_sq_length
to 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¶