PyTypeObject
PyType_Type
type
in the Python layer.PyType_Check
(PyObject *o)PyType_CheckExact
(PyObject *o)PyType_ClearCache
()PyType_GetFlags
(PyTypeObject* type)Return the tp_flags
member of type. This function is primarily
meant for use with Py_LIMITED_API; the individual flag bits are
guaranteed to be stable across Python releases, but access to
tp_flags
itself is not part of the limited API.
New in version 3.2.
Changed in version 3.4: The return type is now unsigned long
rather than long
.
PyType_Modified
(PyTypeObject *type)PyType_HasFeature
(PyTypeObject *o, int feature)PyType_IS_GC
(PyTypeObject *o)Py_TPFLAGS_HAVE_GC
.PyType_IsSubtype
(PyTypeObject *a, PyTypeObject *b)Return true if a is a subtype of b.
This function only checks for actual subtypes, which means that
__subclasscheck__()
is not called on b. Call
PyObject_IsSubclass()
to do the same check that issubclass()
would do.
PyType_GenericAlloc
(PyTypeObject *type, Py_ssize_t nitems)Return value: New reference.
Generic handler for the tp_alloc
slot of a type object. Use
Python’s default memory allocation mechanism to allocate a new instance and
initialize all its contents to NULL
.
PyType_GenericNew
(PyTypeObject *type, PyObject *args, PyObject *kwds)Return value: New reference.
Generic handler for the tp_new
slot of a type object. Create a
new instance using the type’s tp_alloc
slot.
PyType_Ready
(PyTypeObject *type)0
on success, or return -1
and sets an exception on error.PyType_GetSlot
(PyTypeObject *type, int slot)Return the function pointer stored in the given slot. If the
result is NULL
, this indicates that either the slot is NULL
,
or that the function was called with invalid parameters.
Callers will typically cast the result pointer into the appropriate
function type.
See PyType_Slot.slot
for possible values of the slot argument.
An exception is raised if type is not a heap type.
New in version 3.4.
The following functions and structs are used to create heap types.
PyType_FromSpecWithBases
(PyType_Spec *spec, PyObject *bases)Return value: New reference.
Creates and returns a heap type object from the spec
(Py_TPFLAGS_HEAPTYPE
).
If bases is a tuple, the created heap type contains all types contained in it as base types.
If bases is NULL
, the Py_tp_base slot is used instead.
If that also is NULL
, the new type derives from object
.
This function calls PyType_Ready()
on the new type.
New in version 3.3.
PyType_FromSpec
(PyType_Spec *spec)Return value: New reference.
Equivalent to PyType_FromSpecWithBases(spec, NULL)
.
PyType_Spec
Structure defining a type’s behavior.
PyType_Spec.name
Name of the type, used to set PyTypeObject.tp_name
.
PyType_Spec.basicsize
PyType_Spec.itemsize
Size of the instance in bytes, used to set
PyTypeObject.tp_basicsize
and
PyTypeObject.tp_itemsize
.
PyType_Spec.flags
Type flags, used to set PyTypeObject.tp_flags
.
If the Py_TPFLAGS_HEAPTYPE
flag is not set,
PyType_FromSpecWithBases()
sets it automatically.
PyType_Spec.slots
Array of PyType_Slot
structures.
Terminated by the special slot value {0, NULL}
.
PyType_Slot
Structure defining optional functionality of a type, containing a slot ID and a value pointer.
PyType_Slot.slot
A slot ID.
Slot IDs are named like the field names of the structures
PyTypeObject
, PyNumberMethods
,
PySequenceMethods
, PyMappingMethods
and
PyAsyncMethods
with an added Py_
prefix.
For example, use:
Py_tp_dealloc
to set PyTypeObject.tp_dealloc
Py_nb_add
to set PyNumberMethods.nb_add
Py_sq_length
to set PySequenceMethods.sq_length
The following fields cannot be set using PyType_Spec
and PyType_Slot
:
tp_print
Setting Py_tp_bases
may be problematic on some platforms.
To avoid issues, use the bases argument of
PyType_FromSpecWithBases()
instead.
PyType_Slot.pfunc
The desired value of the slot. In most cases, this is a pointer to a function.
May not be NULL
.