Введите объекты¶
-
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}
.
-
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_dealloc
Py_nb_add
для установкиPyNumberMethods.nb_add
Py_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¶