Введите объекты

type PyTypeObject
Part of the Ограниченный API (as an opaque struct).

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

PyTypeObject PyType_Type
Part of the Стабильный ABI.

Это объект типа для объектов типа; это тот же объект, что и type на уровне Python.

int PyType_Check(PyObject *o)

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

int PyType_CheckExact(PyObject *o)

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

unsigned int PyType_ClearCache()
Part of the Стабильный ABI.

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

unsigned long PyType_GetFlags(PyTypeObject *type)
Part of the Стабильный ABI.

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

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

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

void PyType_Modified(PyTypeObject *type)
Part of the Стабильный ABI.

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

int PyType_HasFeature(PyTypeObject *o, int feature)

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

int PyType_IS_GC(PyTypeObject *o)

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

int PyType_IsSubtype(PyTypeObject *a, PyTypeObject *b)
Part of the Стабильный ABI.

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

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

PyObject *PyType_GenericAlloc(PyTypeObject *type, Py_ssize_t nitems)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

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

PyObject *PyType_GenericNew(PyTypeObject *type, PyObject *args, PyObject *kwds)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Универсальный обработчик для слота tp_new объекта типа. Создайте новый экземпляр, используя слот типа tp_alloc.

int PyType_Ready(PyTypeObject *type)
Part of the Стабильный ABI.

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

Примечание

Если какой-либо из базовых классов реализует протокол GC, а предоставленный тип не содержит Py_TPFLAGS_HAVE_GC в своих флагах, то протокол GC будет автоматически реализован из его родительских классов. Напротив, если создаваемый тип действительно включает Py_TPFLAGS_HAVE_GC в свои флаги, то он должен реализовать сам протокол GC, по крайней мере, реализовав дескриптор tp_traverse.

PyObject *PyType_GetName(PyTypeObject *type)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.11.

Возвращает имя типа. Эквивалентно получению атрибута типа __name__.

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

PyObject *PyType_GetQualName(PyTypeObject *type)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.11.

Возвращает полное имя типа. Эквивалентно получению атрибута типа __qualname__.

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

void *PyType_GetSlot(PyTypeObject *type, int slot)
Part of the Стабильный ABI since version 3.4.

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

Смотрите PyType_Slot.slot для получения возможных значений аргумента slot.

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

Изменено в версии 3.10: PyType_GetSlot() теперь может принимать все типы. Ранее он был ограничен heap types.

PyObject *PyType_GetModule(PyTypeObject *type)
Part of the Стабильный ABI since version 3.10.

Возвращает объект модуля, связанный с данным типом, когда тип был создан с использованием PyType_FromModuleAndSpec().

Если ни один модуль не связан с данным типом, задает TypeError и возвращает NULL.

Эта функция обычно используется для получения модуля, в котором определен метод. Обратите внимание, что в таком методе PyType_GetModule(Py_TYPE(self)) может не возвращать ожидаемый результат. Py_TYPE(self) может быть подклассом предполагаемого класса, а подклассы не обязательно определены в том же модуле, что и их суперкласс. Смотрите PyCMethod, чтобы получить класс, определяющий метод. Смотрите PyType_GetModuleByDef() для случаев, когда PyCMethod не может быть использован.

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

void *PyType_GetModuleState(PyTypeObject *type)
Part of the Стабильный ABI since version 3.10.

Возвращает состояние объекта module, связанного с данным типом. Это ярлык для вызова PyModule_GetState() на основе результата PyType_GetModule().

Если ни один модуль не связан с данным типом, задает TypeError и возвращает NULL.

Если с типом ** связан модуль, но его состояние равно NULL, возвращает NULL без установки исключения.

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

PyObject *PyType_GetModuleByDef(PyTypeObject *type, struct PyModuleDef *def)

Найдите первый суперкласс, модуль которого был создан из заданного PyModuleDef def, и верните этот модуль.

Если модуль не найден, генерируется a TypeError и возвращается NULL.

Эта функция предназначена для использования совместно с PyModule_GetState() для получения состояния модуля из методов slot (таких как tp_init или nb_add) и других мест, где класс, определяющий метод, не может быть передан используя соглашение о вызове PyCMethod.

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

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

Для создания heap types используются следующие функции и структуры.

PyObject *PyType_FromModuleAndSpec(PyObject *module, PyType_Spec *spec, PyObject *bases)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.10.

Создает и возвращает heap type из спецификации (Py_TPFLAGS_HEAPTYPE).

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

Аргумент module может использоваться для записи модуля, в котором определен новый класс. Это должен быть объект module или NULL. Если нет NULL, то модуль ассоциируется с новым типом и позже может быть извлечен с помощью PyType_GetModule(). Связанный модуль не наследуется подклассами; он должен быть указан для каждого класса индивидуально.

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

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

Изменено в версии 3.10: Функция теперь принимает один класс в качестве аргумента bases и NULL в качестве tp_doc слота.

PyObject *PyType_FromSpecWithBases(PyType_Spec *spec, PyObject *bases)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI since version 3.3.

Эквивалентно PyType_FromModuleAndSpec(NULL, spec, bases).

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

PyObject *PyType_FromSpec(PyType_Spec *spec)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Эквивалентно PyType_FromSpecWithBases(spec, NULL).

type PyType_Spec
Part of the Стабильный ABI (including all members).

Структура, определяющая поведение типа.

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}.

type PyType_Slot
Part of the Стабильный ABI (including all members).

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

int PyType_Slot.slot

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

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

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

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

Изменено в версии 3.9: Интервалы в PyBufferProcs могут быть установлены в unlimited API.

Изменено в версии 3.11: bf_getbuffer и bf_releasebuffer теперь доступны в разделе limited API.

void *PyType_Slot.pfunc

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

Интервалы, отличные от Py_tp_doc, могут не совпадать с NULL.

Вернуться на верх