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.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}
终止。
- 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
。