Капсулы

Обратитесь к Предоставление 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 использует функцию C strcmp() для сравнения имен капсул.

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 в случае успеха. Возвращает значение, отличное от нуля, и устанавливает исключение в случае сбоя.

Вернуться на верх