Type Objects¶
PyTypeObject
¶The C structure of the objects used to describe built-in types.
- PyObject*
PyType_Type
¶ This is the type object for type objects; it is the same object as
type
in the Python layer.
- int
PyType_Check
(PyObject *o)¶ Return true if the objecto is a type object, including instances of typesderived from the standard type object. Return false in all other cases.
- int
PyType_CheckExact
(PyObject *o)¶ Return true if the objecto is a type object, but not a subtype of thestandard type object. Return false in all other cases.
- unsigned int
PyType_ClearCache
()¶ Clear the internal lookup cache. Return the current version tag.
- unsigned long
PyType_GetFlags
(PyTypeObject* type)¶ Return the
tp_flags
member oftype. This function is primarilymeant for use withPy_LIMITED_API; the individual flag bits areguaranteed to be stable across Python releases, but access totp_flags
itself is not part of the limited API.New in version 3.2.
Changed in version 3.4:The return type is now
unsignedlong
rather thanlong
.
- void
PyType_Modified
(PyTypeObject *type)¶ Invalidate the internal lookup cache for the type and all of itssubtypes. This function must be called after any manualmodification of the attributes or base classes of the type.
- int
PyType_HasFeature
(PyTypeObject *o, int feature)¶ Return true if the type objecto sets the featurefeature. Type featuresare denoted by single bit flags.
- int
PyType_IS_GC
(PyTypeObject *o)¶ Return true if the type object includes support for the cycle detector; thistests the type flag
Py_TPFLAGS_HAVE_GC
.
- int
PyType_IsSubtype
(PyTypeObject *a,PyTypeObject *b)¶ Return true ifa is a subtype ofb.
This function only checks for actual subtypes, which means that
__subclasscheck__()
is not called onb. CallPyObject_IsSubclass()
to do the same check thatissubclass()
would do.
- PyObject*
PyType_GenericAlloc
(PyTypeObject *type, Py_ssize_t nitems)¶ - Return value: New reference.
Generic handler for the
tp_alloc
slot of a type object. UsePython’s default memory allocation mechanism to allocate a new instance andinitialize all its contents toNULL
.
- PyObject*
PyType_GenericNew
(PyTypeObject *type,PyObject *args,PyObject *kwds)¶ - Return value: New reference.
Generic handler for the
tp_new
slot of a type object. Create anew instance using the type’stp_alloc
slot.
- int
PyType_Ready
(PyTypeObject *type)¶ Finalize a type object. This should be called on all type objects to finishtheir initialization. This function is responsible for adding inherited slotsfrom a type’s base class. Return
0
on success, or return-1
and sets anexception on error.
- void*
PyType_GetSlot
(PyTypeObject *type, int slot)¶ Return the function pointer stored in the given slot. If theresult is
NULL
, this indicates that either the slot isNULL
,or that the function was called with invalid parameters.Callers will typically cast the result pointer into the appropriatefunction type.See
PyType_Slot.slot
for possible values of theslot argument.An exception is raised iftype is not a heap type.
New in version 3.4.
Creating Heap-Allocated Types¶
The following functions and structs are used to createheap types.
- PyObject*
PyType_FromSpecWithBases
(PyType_Spec *spec,PyObject *bases)¶ - Return value: New reference.
Creates and returns a heap type object from thespec(
Py_TPFLAGS_HEAPTYPE
).Ifbases is a tuple, the created heap type contains all types containedin it as base types.
Ifbases is
NULL
, thePy_tp_bases slot is used instead.If that also isNULL
, thePy_tp_base slot is used instead.If that also isNULL
, the new type derives fromobject
.This function calls
PyType_Ready()
on the new type.New in version 3.3.
- PyObject*
PyType_FromSpec
(PyType_Spec *spec)¶ - Return value: New reference.
Equivalent to
PyType_FromSpecWithBases(spec,NULL)
.
PyType_Spec
¶Structure defining a type’s behavior.
- const char*
PyType_Spec.name
¶ Name of the type, used to set
PyTypeObject.tp_name
.
- int
PyType_Spec.basicsize
¶
- int
PyType_Spec.itemsize
¶ Size of the instance in bytes, used to set
PyTypeObject.tp_basicsize
andPyTypeObject.tp_itemsize
.
- int
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_Slot *
PyType_Spec.slots
¶ Array of
PyType_Slot
structures.Terminated by the special slot value{0,NULL}
.
- const char*
PyType_Slot
¶Structure defining optional functionality of a type, containing a slot IDand a value pointer.
- int
PyType_Slot.slot
¶ A slot ID.
Slot IDs are named like the field names of the structures
PyTypeObject
,PyNumberMethods
,PySequenceMethods
,PyMappingMethods
andPyAsyncMethods
with an addedPy_
prefix.For example, use:Py_tp_dealloc
to setPyTypeObject.tp_dealloc
Py_nb_add
to setPyNumberMethods.nb_add
Py_sq_length
to setPySequenceMethods.sq_length
The following fields cannot be set using
PyType_Spec
andPyType_Slot
:tp_print
Setting
Py_tp_bases
orPy_tp_base
may beproblematic on some platforms.To avoid issues, use thebases argument ofPyType_FromSpecWithBases()
instead.
- void *
PyType_Slot.pfunc
¶ The desired value of the slot. In most cases, this is a pointerto a function.
May not be
NULL
.
- int