Type features are denoted by single bit flags.
+.. c:function:: int PyType_FastSubclass(PyTypeObject *type, int flag)
+
+ Return non-zero if the type object *type* sets the subclass flag *flag*.
+ Subclass flags are denoted by
+ :c:macro:`Py_TPFLAGS_*_SUBCLASS <Py_TPFLAGS_LONG_SUBCLASS>`.
+ This function is used by many ``_Check`` functions for common types.
+
+ .. seealso::
+ :c:func:`PyObject_TypeCheck`, which is used as a slower alternative in
+ ``_Check`` functions for types that don't come with subclass flags.
+
+
.. c:function:: int PyType_IS_GC(PyTypeObject *o)
Return true if the type object includes support for the cycle detector; this
.. c:macro:: Py_TPFLAGS_BASE_EXC_SUBCLASS
.. c:macro:: Py_TPFLAGS_TYPE_SUBCLASS
- These flags are used by functions such as
- :c:func:`PyLong_Check` to quickly determine if a type is a subclass
+ Functions such as :c:func:`PyLong_Check` will call :c:func:`PyType_FastSubclass`
+ with one of these flags to quickly determine if a type is a subclass
of a built-in type; such specific checks are faster than a generic
check, like :c:func:`PyObject_IsInstance`. Custom types that inherit
from built-ins should have their :c:member:`~PyTypeObject.tp_flags`