entry indicates an offset from the subclass-specific data, rather than
from ``PyObject``.
- Can only be used as part of :c:member:`Py_tp_members <PyTypeObject.tp_members>`
+ Can only be used as part of the :c:data:`Py_tp_members`
:c:type:`slot <PyType_Slot>` when creating a class using negative
:c:member:`~PyType_Spec.basicsize`.
It is mandatory in that case.
-
- This flag is only used in :c:type:`PyType_Slot`.
- When setting :c:member:`~PyTypeObject.tp_members` during
- class creation, Python clears it and sets
+ When setting :c:member:`~PyTypeObject.tp_members` from the slot during
+ class creation, Python clears the flag and sets
:c:member:`PyMemberDef.offset` to the offset from the ``PyObject`` struct.
.. index::
The *bases* argument can be used to specify base classes; it can either
be only one class or a tuple of classes.
- If *bases* is ``NULL``, the *Py_tp_bases* slot is used instead.
- If that also is ``NULL``, the *Py_tp_base* slot is used instead.
+ If *bases* is ``NULL``, the :c:data:`Py_tp_bases` slot is used instead.
+ If that also is ``NULL``, the :c:data:`Py_tp_base` slot is used instead.
If that also is ``NULL``, the new type derives from :class:`object`.
The *module* argument can be used to record the module in which the new
:c:type:`PyAsyncMethods` with an added ``Py_`` prefix.
For example, use:
- * ``Py_tp_dealloc`` to set :c:member:`PyTypeObject.tp_dealloc`
- * ``Py_nb_add`` to set :c:member:`PyNumberMethods.nb_add`
- * ``Py_sq_length`` to set :c:member:`PySequenceMethods.sq_length`
+ * :c:data:`Py_tp_dealloc` to set :c:member:`PyTypeObject.tp_dealloc`
+ * :c:data:`Py_nb_add` to set :c:member:`PyNumberMethods.nb_add`
+ * :c:data:`Py_sq_length` to set :c:member:`PySequenceMethods.sq_length`
An additional slot is supported that does not correspond to a
:c:type:`!PyTypeObject` struct field:
If it is not possible to switch to a ``MANAGED`` flag (for example,
for vectorcall or to support Python older than 3.12), specify the
- offset in :c:member:`Py_tp_members <PyTypeObject.tp_members>`.
+ offset in :c:data:`Py_tp_members`.
See :ref:`PyMemberDef documentation <pymemberdef-offsets>`
for details.
.. versionchanged:: 3.14
The field :c:member:`~PyTypeObject.tp_vectorcall` can now set
- using ``Py_tp_vectorcall``. See the field's documentation
+ using :c:data:`Py_tp_vectorcall`. See the field's documentation
for details.
.. c:member:: void *pfunc
*pfunc* values may not be ``NULL``, except for the following slots:
- * ``Py_tp_doc``
+ * :c:data:`Py_tp_doc`
* :c:data:`Py_tp_token` (for clarity, prefer :c:data:`Py_TP_USE_SPEC`
rather than ``NULL``)
This field should be set to ``NULL`` and treated as read-only.
Python will fill it in when the type is :c:func:`initialized <PyType_Ready>`.
- For dynamically created classes, the ``Py_tp_bases``
+ For dynamically created classes, the :c:data:`Py_tp_bases`
:c:type:`slot <PyType_Slot>` can be used instead of the *bases* argument
of :c:func:`PyType_FromSpecWithBases`.
The argument form is preferred.
That is, heap types should:
- Have the :c:macro:`Py_TPFLAGS_HAVE_GC` flag.
-- Define a traverse function using ``Py_tp_traverse``, which
+- Define a traverse function using :c:data:`Py_tp_traverse`, which
visits the type (e.g. using ``Py_VISIT(Py_TYPE(self))``).
Please refer to the documentation of