Капсулы

Более подробную информацию об использовании этих объектов см. в разделе Предоставление C API для модуля расширения.

Добавлено в версии 3.1.

type PyCapsule

Этот подтип PyObject представляет непрозрачное значение, полезное для модулей расширения языка C, которым нужно передать непрозрачное значение (как указатель void*) через код Python в другой код C. Он часто используется для того, чтобы сделать указатель функции Си, определенной в одном модуле, доступным для других модулей, чтобы обычный механизм импорта можно было использовать для доступа к API Си, определенным в динамически загружаемых модулях.

type PyCapsule_Destructor
Part of the Stable ABI.

Тип обратного вызова деструктора для капсулы. Определяется как:

typedef void (*PyCapsule_Destructor)(PyObject *);

Семантику обратных вызовов PyCapsule_Destructor смотрите в PyCapsule_New().

int PyCapsule_CheckExact(PyObject *p)

Возвращает true, если его аргумент является PyCapsule. Эта функция всегда успешна.

PyObject *PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)
Return value: New reference. Part of the Stable ABI.

Создать PyCapsule, заключающий в себе указатель. Аргумент указатель не может быть NULL.

В случае неудачи установите исключение и верните NULL.

Строка name может быть либо NULL, либо указателем на допустимую строку C. Если не``NULL``, то эта строка должна пережить капсулу. (Хотя разрешается освободить ее внутри деструктора).

Если аргумент destructor не NULL, то при уничтожении капсулы он будет вызван с капсулой в качестве аргумента.

Если эта капсула будет храниться как атрибут модуля, то имя должно быть указано как modulename.attributename. Это позволит другим модулям импортировать капсулу с помощью PyCapsule_Import().

void *PyCapsule_GetPointer(PyObject *capsule, const char *name)
Part of the Stable ABI.

Извлечь указатель, хранящийся в капсуле. При неудаче установите исключение и верните NULL.

Параметр name должен точно совпадать с именем, хранящимся в капсуле. Если имя, хранящееся в капсуле, равно NULL, то передаваемое name также должно быть NULL. Python использует функцию языка Си strcmp() для сравнения имен капсул.

PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule)
Part of the Stable ABI.

Возвращает текущий деструктор, хранящийся в капсуле. В случае неудачи установите исключение и верните NULL.

Капсула может иметь деструктор NULL. Это делает код возврата NULL несколько двусмысленным; используйте PyCapsule_IsValid() или PyErr_Occurred() для разграничения.

void *PyCapsule_GetContext(PyObject *capsule)
Part of the Stable ABI.

Возвращает текущий контекст, хранящийся в капсуле. При неудаче устанавливается исключение и возвращается NULL.

Капсула может иметь контекст NULL. Это делает код возврата NULL несколько двусмысленным; используйте PyCapsule_IsValid() или PyErr_Occurred() для разграничения.

const char *PyCapsule_GetName(PyObject *capsule)
Part of the Stable ABI.

Возвращает текущее имя, хранящееся в капсуле. При неудаче установите исключение и верните NULL.

Капсула может иметь имя NULL. Это делает код возврата NULL несколько двусмысленным; используйте PyCapsule_IsValid() или PyErr_Occurred() для разграничения.

void *PyCapsule_Import(const char *name, int no_block)
Part of the Stable ABI.

Импорт указателя на объект C из атрибута капсулы в модуле. Параметр name должен задавать полное имя атрибута, как в module.attribute. Имя name, хранящееся в капсуле, должно точно соответствовать этой строке. Если no_block равно true, импортируйте модуль без блокировки (используя PyImport_ImportModuleNoBlock()). Если no_block ложно, импортируйте модуль условно (используя PyImport_ImportModule()).

Возвращает внутренний указатель капсулы в случае успеха. В случае неудачи установите исключение и верните NULL.

int PyCapsule_IsValid(PyObject *capsule, const char *name)
Part of the Stable ABI.

Определяет, является ли капсула действительной капсулой. Правильная капсула не``NULL``, проходит PyCapsule_CheckExact(), в ней хранится не``NULL`` указатель, и ее внутреннее имя соответствует параметру name. (Информацию о том, как сравниваются имена капсул, см. в PyCapsule_GetPointer()).

Другими словами, если PyCapsule_IsValid() возвращает истинное значение, вызов любого из аксессоров (любой функции, начинающейся с PyCapsule_Get()) гарантированно будет успешным.

Возвращает ненулевое значение, если объект действителен и соответствует переданному имени. В противном случае возвращается 0. Эта функция не даст сбоя.

int PyCapsule_SetContext(PyObject *capsule, void *context)
Part of the Stable ABI.

Установите указатель контекста внутри capsule на context.

Вернуть 0 при успехе. При неудаче возвращает ненулевое значение и устанавливает исключение.

int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)
Part of the Stable ABI.

Установите деструктор внутри капсулы на деструктор.

Вернуть 0 при успехе. При неудаче возвращает ненулевое значение и устанавливает исключение.

int PyCapsule_SetName(PyObject *capsule, const char *name)
Part of the Stable ABI.

Установите имя внутри капсулы в имя. Если не``NULL``, имя должно пережить капсулу. Если предыдущее имя, хранившееся в капсуле, не было NULL, попытка освободить его не предпринимается.

Вернуть 0 при успехе. При неудаче возвращает ненулевое значение и устанавливает исключение.

int PyCapsule_SetPointer(PyObject *capsule, void *pointer)
Part of the Stable ABI.

Установите указатель void внутри capsule в pointer. Указатель не может быть NULL.

Вернуть 0 при успехе. При неудаче возвращает ненулевое значение и устанавливает исключение.

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