Капсулы¶
Более подробную информацию об использовании этих объектов см. в разделе Предоставление 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при успехе. При неудаче возвращает ненулевое значение и устанавливает исключение.