Документация Python неофициальный перевод
Содержание страницы

Объекты типовType Objects

PyTypeObject

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

PyObject* PyType_Type

Это объект типа для объектов-типов; он совпадает с объектом type на уровне Python.

int PyType_Check(PyObject *o)

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

int PyType_CheckExact(PyObject *o)

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

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)

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

int PyType_IS_GC(PyTypeObject *o)

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

int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)

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

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

PyObject* PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
Возвращаемое значение: новая ссылка.

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

PyObject* PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
Возвращаемое значение: новая ссылка.

Универсальный обработчик для слота 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.

Создание типов, размещаемых в кучеCreating Heap-Allocated Types

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

PyObject* PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
Возвращаемое значение: новая ссылка.

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

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

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

Эта функция вызывает PyType_Ready() у нового типа.

Новое в версии 3.3.

PyObject* PyType_FromSpec(PyType_Spec *spec)
Возвращаемое значение: новая ссылка.

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