Капсулы¶
Обратитесь к Предоставление API на языке C для модуля расширения для получения дополнительной информации об использовании этих объектов.
Добавлено в версии 3.1.
-
type PyCapsule¶
Этот подтип
PyObject
представляет собой непрозрачное значение, полезное для модулей расширения C, которым необходимо передать непрозрачное значение (как указатель void*) через код Python в другой код C. Он часто используется для того, чтобы сделать указатель на функцию C, определенный в одном модуле, доступным для других модулей, поэтому обычный механизм импорта можно использовать для доступа к API C, определенным в динамически загружаемых модулях.
-
type PyCapsule_Destructor¶
- Part of the Стабильный ABI.
Тип обратного вызова деструктора для капсулы. Определяется как:
typedef void (*PyCapsule_Destructor)(PyObject *);
Смотрите
PyCapsule_New()
для описания семантики обратных вызовов PyCapsule_Destructor.
-
int PyCapsule_CheckExact(PyObject *p)¶
Возвращает значение true, если его аргументом является a
PyCapsule
. Эта функция всегда выполняется успешно.
-
PyObject *PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)¶
- Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.
Создайте a
PyCapsule
, инкапсулирующий указатель. Аргумент pointer может не бытьNULL
.В случае сбоя создайте исключение и верните
NULL
.Строка name может быть либо
NULL
, либо указателем на допустимую строку на языке Си. Если неNULL
, эта строка должна пережить капсулу. (Хотя ее можно освободить внутри деструктора).Если аргумент destructor не
NULL
, то при уничтожении он будет вызван с капсулой в качестве аргумента.Если эта капсула будет сохранена как атрибут модуля, то имя должно быть указано как
modulename.attributename
. Это позволит другим модулям импортировать капсулу, используяPyCapsule_Import()
.
-
void *PyCapsule_GetPointer(PyObject *capsule, const char *name)¶
- Part of the Стабильный ABI.
Извлеките указатель, сохраненный в капсуле. В случае сбоя создайте исключение и верните
NULL
.Параметр name должен в точности соответствовать имени, сохраненному в капсуле. Если имя, сохраненное в капсуле, равно
NULL
, переданное name также должно бытьNULL
. Python использует функцию Cstrcmp()
для сравнения имен капсул.
-
PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule)¶
- Part of the Стабильный ABI.
Верните текущий деструктор, сохраненный в капсуле. В случае сбоя создайте исключение и верните
NULL
.Для капсулы допустимо наличие
NULL
деструктора. Это делает код возвратаNULL
несколько двусмысленным; используйтеPyCapsule_IsValid()
илиPyErr_Occurred()
для устранения неоднозначности.
-
void *PyCapsule_GetContext(PyObject *capsule)¶
- Part of the Стабильный ABI.
Возвращает текущий контекст, сохраненный в капсуле. В случае сбоя создайте исключение и верните
NULL
.Для капсулы допустимо иметь контекст
NULL
. Это делает код возвратаNULL
несколько двусмысленным; используйтеPyCapsule_IsValid()
илиPyErr_Occurred()
для устранения неоднозначности.
-
const char *PyCapsule_GetName(PyObject *capsule)¶
- Part of the Стабильный ABI.
Возвращает текущее имя, сохраненное в капсуле. В случае сбоя создайте исключение и верните
NULL
.Допустимо, чтобы у капсулы было имя
NULL
. Это делает код возвратаNULL
несколько двусмысленным; используйтеPyCapsule_IsValid()
илиPyErr_Occurred()
для устранения двусмысленности.
-
void *PyCapsule_Import(const char *name, int no_block)¶
- Part of the Стабильный ABI.
Импортируйте указатель на объект C из атрибута capsule в модуле. Параметр name должен указывать полное имя атрибута, как в
module.attribute
. Имя*, сохраненное в capsule, должно точно соответствовать этой строке.В случае успеха верните внутренний указатель на капсулу. В случае сбоя создайте исключение и верните
NULL
.Изменено в версии 3.3: no_block больше не действует.
-
int PyCapsule_IsValid(PyObject *capsule, const char *name)¶
- Part of the Стабильный ABI.
Определяет, является ли capsule допустимой капсулой. Допустимая капсула не является``NULL``, передает
PyCapsule_CheckExact()
, в ней хранится указатель, отличный от``NULL``, а ее внутреннее имя совпадает с параметром name. (Смотрите : c:func:PyCapsule_GetPointer для получения информации о том, как сравниваются названия капсул.)Другими словами, если
PyCapsule_IsValid()
возвращает значение true, то вызовы любого из методов доступа (любой функции, начинающейся сPyCapsule_Get
) гарантированно завершатся успешно.Возвращает ненулевое значение, если объект является допустимым и соответствует переданному имени. В противном случае возвращает
0
. Эта функция не завершится ошибкой.
-
int PyCapsule_SetContext(PyObject *capsule, void *context)¶
- Part of the Стабильный ABI.
Установите указатель контекста внутри capsule на context.
Возвращает
0
в случае успеха. Возвращает значение, отличное от нуля, и устанавливает исключение в случае сбоя.
-
int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)¶
- Part of the Стабильный ABI.
Установите для деструктора внутри capsule значение деструктор.
Возвращает
0
в случае успеха. Возвращает значение, отличное от нуля, и устанавливает исключение в случае сбоя.
-
int PyCapsule_SetName(PyObject *capsule, const char *name)¶
- Part of the Стабильный ABI.
Задайте для имени внутри capsule значение name. Если оно не
NULL
, то имя должно пережить капсулу. Если предыдущее имя, сохраненное в капсуле, не былоNULL
, попытка его освобождения не предпринимается.Возвращает
0
в случае успеха. Возвращает значение, отличное от нуля, и устанавливает исключение в случае сбоя.
-
int PyCapsule_SetPointer(PyObject *capsule, void *pointer)¶
- Part of the Стабильный ABI.
Установите для указателя void внутри capsule значение pointer. Указатель может быть не
NULL
.Возвращает
0
в случае успеха. Возвращает значение, отличное от нуля, и устанавливает исключение в случае сбоя.