Капсулы
Дополнительную информацию об использовании этих объектов см. в разделе Предоставление C API для модуля расширения.
В версии 3.1.
-
type PyCapsule -
Этот подтип
PyObjectпредставляет собой непрозрачное значение, полезное для модулей расширения C, которым необходимо передать непрозрачное значение (какvoid*указатель) через код Python другому коду C. Он часто используется для предоставления указателя на функцию C, определенную в одном модуле, другим модулям, чтобы стандартный механизм импорта мог использоваться для доступа к C API, определенным в динамически загружаемых модулях.
-
type PyCapsule_Destructor -
Часть Стабильной ABI.
Тип обратного вызова деструктора для капсулы. Определяется как:
typedef void (*PyCapsule_Destructor)(PyObject *);
См.
PyCapsule_New()для семантики обратных вызовов PyCapsule_Destructor.
-
int PyCapsule_CheckExact(PyObject *p) -
Возвращает true, если аргумент является
PyCapsule. Эта функция всегда выполняется успешно.
-
PyObject *PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor) -
Значение возврата: Новая ссылка. Часть Стабильной ABI.
Создает
PyCapsule, содержащий указатель. Аргумент указатель не может бытьNULL.В случае ошибки устанавливает исключение и возвращает
NULL.Строка имя может быть либо
NULLили указателем на допустимую строку C. Если неNULL, эта строка должна существовать дольше капсулы. (Хотя разрешается освободить ее внутри деструктора.)Если аргумент деструктор не
NULL, он будет вызываться с капсулой в качестве аргумента при ее уничтожении.Если эта капсула будет храниться в качестве атрибута модуля, имя должно быть указано как
modulename.attributename. Это позволит другим модулям импортировать капсулу с помощьюPyCapsule_Import().
-
void *PyCapsule_GetPointer(PyObject *capsule, const char *name) -
Часть Стабильной ABI.
Извлекает указатель, сохраненный в капсуле. В случае ошибки устанавливает исключение и возвращает
NULL.Параметр имя должен точно совпадать с именем, сохраненным в капсуле. Если имя, сохраненное в капсуле,
NULL, переданное имя также должно бытьNULL. Python использует функцию Cstrcmp()для сравнения имен капсул.
-
PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule) -
Часть Стабильной ABI.
Возвращает текущий деструктор, сохраненный в капсуле. В случае ошибки устанавливает исключение и возвращает
NULL.Допустимо, чтобы капсула имела
NULLдеструктор. Это делает код возвратаNULLнесколько неоднозначным; используйтеPyCapsule_IsValid()илиPyErr_Occurred()для устранения неоднозначности.
-
void *PyCapsule_GetContext(PyObject *capsule) -
Часть Стабильной ABI.
Возвращает текущий контекст, сохраненный в капсуле. В случае ошибки устанавливает исключение и возвращает
NULL.Допустимо, чтобы капсула имела
NULLконтекст. Это делает код возвратаNULLнесколько неоднозначным; используйтеPyCapsule_IsValid()илиPyErr_Occurred()для устранения неоднозначности.
-
const char *PyCapsule_GetName(PyObject *capsule) -
Часть Стабильной ABI.
Возвращает текущее имя, сохраненное в капсуле. В случае ошибки устанавливает исключение и возвращает
NULL.Допустимо, чтобы капсула имела
NULLимя. Это делает код возвратаNULLнесколько неоднозначным; используйтеPyCapsule_IsValid()илиPyErr_Occurred()для устранения неоднозначности.
-
void *PyCapsule_Import(const char *name, int no_block) -
Часть Стабильной ABI.
Импортирует указатель на C-объект из атрибута капсулы в модуле. Параметр имя должен указывать полное имя атрибута, как в
module.attribute. Хранимое в капсуле имя должно точно совпадать с этой строкой. Если no_block равно true, импортирует модуль без блокировки (используяPyImport_ImportModuleNoBlock()). Если no_block равно false, импортирует модуль стандартным способом (используяPyImport_ImportModule()).Возвращает внутренний указатель капсулы при успехе. В случае ошибки устанавливает исключение и возвращает
NULL.
-
int PyCapsule_IsValid(PyObject *capsule, const char *name) -
Часть Стабильной ABI.
Определяет, является ли капсула допустимой капсулой. Допустимая капсула не
NULL, проходитPyCapsule_CheckExact(), имеет сохраненный в ней ненулевой указатель и ее внутреннее имя соответствует параметру имя. (См.PyCapsule_GetPointer()для получения информации о сравнении имен капсул.)Другими словами, если
PyCapsule_IsValid()возвращает true, вызовы любых функций-аксессоров (любой функции, начинающейся сPyCapsule_Get()) гарантированно выполнятся успешно.Возвращает ненулевое значение, если объект действителен и соответствует переданному имени. Возвращает
0в противном случае. Эта функция не потерпит сбоев.
-
int PyCapsule_SetContext(PyObject *capsule, void *context) -
Часть Стабильной ABI.
Устанавливает указатель контекста внутри капсулы на контекст.
Возвращает
0при успехе. Возвращает ненулевое значение и устанавливает исключение при ошибке.
-
int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor) -
Часть Стабильной ABI.
Устанавливает деструктор внутри капсулы на деструктор.
Возвращает
0при успехе. Возвращает ненулевое значение и устанавливает исключение при ошибке.
-
int PyCapsule_SetName(PyObject *capsule, const char *name) -
Часть Стабильной ABI.
Устанавливает имя внутри капсулы на имя. Если не
NULL, имя должно существовать дольше капсулы. Если ранее хранившееся в капсуле имя неNULL, попытка освободить его не предпринимается.Возвращает
0при успехе. Возвращает ненулевое значение и устанавливает исключение при ошибке.
-
int PyCapsule_SetPointer(PyObject *capsule, void *pointer) -
Часть Стабильной ABI.
Устанавливает указатель void внутри капсулы на указатель. Указатель не может быть
NULL.Возвращает
0при успехе. Возвращает ненулевое значение и устанавливает исключение при ошибке.
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/capsule.html