Объекты типа

PyTypeObject

Структура C объектов, используемая для описания встроенных типов.

PyObject* PyType_Type

Объект типа для объектов типа; это тот же объект, что и type в слое Python.

int PyType_Check(PyObject *o)

Возвращает true, если o объект является объектом типа, включая сущности типов, производные от объекта стандартного типа. Возвращает false во всех остальных случаях.

int PyType_CheckExact(PyObject *o)

Возвращает true, если o объекта является объектом типа, но не подтипом объекта стандартного типа. Возвращает false во всех остальных случаях.

unsigned int PyType_ClearCache()

Очищает внутренний кэш поиска. Возвращает тег текущей версии.

unsigned long PyType_GetFlags(PyTypeObject* type)

Возвращает tp_flags член type. Данная функция предназначена в первую очередь для использования с Py_LIMITED_API; отдельные биты флага гарантированно стабильны в Python версиях, но доступ к самому tp_flags не является частью ограниченного API.

Добавлено в версии 3.2.

Изменено в версии 3.4: Тип возвращает теперь unsigned long, а не long.

void PyType_Modified(PyTypeObject *type)

Аннулировать внутренний кэш поиска для типа и всех его подтипов. Эта функция должна вызываться после любой ручной модификации атрибуты или базовых классов типа.

int PyType_HasFeature(PyTypeObject *o, int feature)

Возвращает true, если объект типа o задаёт feature элемента. Функции типа обозначаются одноразрядными флагами.

int PyType_IS_GC(PyTypeObject *o)

Возвращает true, если объект типа включает в себя поддержку детектора цикла; при этом проверяется Py_TPFLAGS_HAVE_GC типа флага.

int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)

Возвращает true, если a является подтипом b.

Функция проверяет только фактические подтипы, что означает, что __subclasscheck__() не вызывается для b. Вызов PyObject_IsSubclass(), чтобы сделать ту же проверку, что и issubclass().

PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
Return value: New reference.

Общий обработчик для tp_alloc слота типа объекта. Используйте механизм распределения памяти Python по умолчанию, чтобы аллокации новой сущности и инициализировать всё его содержимое для NULL.

PyObject* PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
Return value: New reference.

Общий обработчик для tp_new слота объекта типа. Создаёт новые сущности с помощью tp_alloc слота типа.

int PyType_Ready(PyTypeObject *type)

Завершение типа объекта. Её необходимо вызывать для всех объектов типа, чтобы завершить их инициализацию. Функция предназначена для добавления унаследованных слотов из базового класса типа. Возвращает 0 при успехе или возвращает -1 и устанавливает исключение при ошибке.

void* PyType_GetSlot(PyTypeObject *type, int slot)

Возвращает указатель функции, хранящийся в данном слоте. Если результат NULL, это означает, что слот NULL или что функция вызвана с недопустимыми параметрами. Вызывающие обычно приводят указатель результата к соответствующему типу функции.

Возможные PyType_Slot.slot аргумента значения см. в разделе slot.

Создаётся исключение, если type не является типом кучи.

Добавлено в версии 3.4.

Создание аллоцированных в куче типов

Следующие функции и структуры используются для создания типов кучи.

PyObject* PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
Return value: New reference.

Создает и возвращает объект типа кучи из spec (Py_TPFLAGS_HEAPTYPE).

Если bases является кортежем, созданный тип кучи содержит все типы, содержащиеся в нем в качестве базовых типов.

Если basesNULL, вместо него используется слот Py_tp_bases. Если это также NULL, вместо него используется слот Py_tp_base. Если это также NULL, новый тип является производным от object.

Функция вызывает PyType_Ready() для нового типа.

Добавлено в версии 3.3.

PyObject* PyType_FromSpec(PyType_Spec *spec)
Return value: New reference.

Эквивалентна 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

Структура, определяющая дополнительные функциональные возможности типа, содержащие идентификатор слота и значение указателя.

int PyType_Slot.slot

Идентификатор слота.

Идентификаторы слотов именуются как имена полей структур PyTypeObject, PyNumberMethods, PySequenceMethods, PyMappingMethods и PyAsyncMethods с добавленным префиксом Py_. Например, используйте:

Следующие поля нельзя задать с помощью PyType_Spec и PyType_Slot:

Установка Py_tp_bases или Py_tp_base может быть проблематичной на некоторых платформах. Чтобы избежать проблем, используйте вместо него аргумент bases PyType_FromSpecWithBases().

void *PyType_Slot.pfunc

Желаемое значение слота. В большинстве случаев это указатель на функцию.

Может быть не NULL.