Введите объекты¶
-
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)¶
Найдите первый суперкласс, модуль которого был создан из заданного
PyModuleDefdef, и верните этот модуль.Если модуль не найден, генерируется 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}.
-
const char *PyType_Spec.name¶
-
type PyType_Slot¶
- Part of the Стабильный ABI (including all members).
Структура, определяющая необязательную функциональность типа, содержащая идентификатор слота и указатель значения.
-
int PyType_Slot.slot¶
Идентификатор слота.
Идентификаторы слотов называются так же, как имена полей структур
PyTypeObject,PyNumberMethods,PySequenceMethods,PyMappingMethodsиPyAsyncMethodsс добавленным префиксомPy_. Например, используйте:Py_tp_deallocдля установкиPyTypeObject.tp_deallocPy_nb_addдля установкиPyNumberMethods.nb_addPy_sq_lengthдля установкиPySequenceMethods.sq_length
Следующие поля вообще не могут быть заданы с помощью
PyType_SpecиPyType_Slot:tp_weaklistoffset(смотрите PyMemberDef)tp_dictoffset(смотрите PyMemberDef)tp_vectorcall_offset(смотрите PyMemberDef)
Установка
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.
-
int PyType_Slot.slot¶