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