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