Capsules¶
Weitere Informationen zur Verwendung dieser Objekte finden Sie unter Bereitstellen einer C-API für ein Erweiterungsmodul.
Hinzugefügt in Version 3.1.
-
Typ PyCapsule¶
Dieser Untertyp von
PyObjectrepräsentiert einen undurchsichtigen Wert, der für C-Erweiterungsmodule nützlich ist, die einen undurchsichtigen Wert (als void*-Zeiger) über Python-Code an anderen C-Code übergeben müssen. Er wird oft verwendet, um einen Funktionszeiger in C, der in einem Modul definiert ist, für andere Module verfügbar zu machen, damit der reguläre Importmechanismus zum Zugriff auf C-APIs verwendet werden kann, die in dynamisch geladenen Modulen definiert sind.
-
Typ PyCapsule_Destructor¶
- Teil der Stable ABI.
Der Typ einer Destruktor-Callback für eine Kapsel. Definiert als
typedef void (*PyCapsule_Destructor)(PyObject *);
Die Semantik von PyCapsule_Destructor-Callbacks finden Sie unter
PyCapsule_New().
-
int PyCapsule_CheckExact(PyObject *p)¶
Gibt `true` zurück, wenn das Argument eine
PyCapsuleist. Diese Funktion ist immer erfolgreich.
-
PyObject *PyCapsule_New(void *pointer, const char *name, PyCapsule_Destructor destructor)¶
- Rückgabewert: Neue Referenz. Teil der Stabilen ABI.
Erstellt eine
PyCapsule, die den pointer kapselt. Das Argument pointer darf nichtNULLsein.Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Der name-String kann entweder
NULLoder ein Zeiger auf einen gültigen C-String sein. Wenn er nichtNULList, muss dieser String die Kapsel überdauern. (Es ist jedoch erlaubt, ihn innerhalb des destructor freizugeben.)Wenn das Argument destructor nicht
NULList, wird es mit der Kapsel als Argument aufgerufen, wenn diese zerstört wird.Wenn diese Kapsel als Attribut eines Moduls gespeichert wird, sollte der name als
modulename.attributenameangegeben werden. Dadurch können andere Module die Kapsel mithilfe vonPyCapsule_Import()importieren.
-
void *PyCapsule_GetPointer(PyObject *capsule, const char *name)¶
- Teil der Stable ABI.
Ruft den in der Kapsel gespeicherten pointer ab. Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Der Parameter name muss exakt mit dem in der Kapsel gespeicherten Namen übereinstimmen. Wenn der in der Kapsel gespeicherte Name
NULList, muss auch der übergebene nameNULLsein. Python verwendet die C-Funktionstrcmp()zum Vergleichen von Kapselnamen.
-
PyCapsule_Destructor PyCapsule_GetDestructor(PyObject *capsule)¶
- Teil der Stable ABI.
Gibt den aktuell in der Kapsel gespeicherten Destruktor zurück. Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Es ist legal, dass eine Kapsel einen
NULL-Destruktor hat. Dies macht einenNULL-Rückgabewert etwas mehrdeutig; verwenden SiePyCapsule_IsValid()oderPyErr_Occurred()zur Unterscheidung.
-
void *PyCapsule_GetContext(PyObject *capsule)¶
- Teil der Stable ABI.
Gibt den aktuell in der Kapsel gespeicherten Kontext zurück. Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Es ist legal, dass eine Kapsel einen
NULL-Kontext hat. Dies macht einenNULL-Rückgabewert etwas mehrdeutig; verwenden SiePyCapsule_IsValid()oderPyErr_Occurred()zur Unterscheidung.
-
const char *PyCapsule_GetName(PyObject *capsule)¶
- Teil der Stable ABI.
Gibt den aktuell in der Kapsel gespeicherten Namen zurück. Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Es ist legal, dass eine Kapsel einen
NULL-Namen hat. Dies macht einenNULL-Rückgabewert etwas mehrdeutig; verwenden SiePyCapsule_IsValid()oderPyErr_Occurred()zur Unterscheidung.
-
void *PyCapsule_Import(const char *name, int no_block)¶
- Teil der Stable ABI.
Importiert einen Zeiger auf ein C-Objekt aus einem Kapselattribut in einem Modul. Der Parameter name sollte den vollständigen Namen des Attributs angeben, z. B.
modulename.attributename. Der in der Kapsel gespeicherte Name muss exakt mit diesem String übereinstimmen.Diese Funktion teilt name anhand des Zeichens
.auf und importiert das erste Element. Anschliessend werden weitere Elemente mittels Attribut-Lookups verarbeitet.Gibt den internen pointer der Kapsel bei Erfolg zurück. Bei einem Fehler wird eine Ausnahme gesetzt und
NULLzurückgegeben.Hinweis
Wenn name auf ein Attribut eines Untermoduls oder einer Unterpakets zeigt, muss dieses Untermodul oder diese Unterpaket zuvor auf andere Weise importiert worden sein (z. B. durch Verwendung von
PyImport_ImportModule()), damit die Attribut-Lookups erfolgreich sind.Geändert in Version 3.3: no_block hat keine Auswirkung mehr.
-
int PyCapsule_IsValid(PyObject *capsule, const char *name)¶
- Teil der Stable ABI.
Bestimmt, ob capsule eine gültige Kapsel ist. Eine gültige Kapsel ist nicht
NULL, bestehtPyCapsule_CheckExact(), enthält einen nichtNULL-Zeiger, und ihr interner Name stimmt mit dem Parameter name überein. (SiehePyCapsule_GetPointer()für Informationen, wie Kapselnamen verglichen werden.)Mit anderen Worten: Wenn
PyCapsule_IsValid()einen wahren Wert zurückgibt, sind Aufrufe von beliebigen Zugriffsmethoden (Funktionen, die mitPyCapsule_Getbeginnen) garantiert erfolgreich.Gibt einen Wert ungleich Null zurück, wenn das Objekt gültig ist und mit dem übergebenen Namen übereinstimmt. Gibt andernfalls
0zurück. Diese Funktion schlägt nicht fehl.
-
int PyCapsule_SetContext(PyObject *capsule, void *context)¶
- Teil der Stable ABI.
Setzt den Kontextzeiger innerhalb von capsule auf context.
Gibt bei Erfolg
0zurück. Gibt andernfalls einen Wert ungleich Null zurück und setzt eine Ausnahme.
-
int PyCapsule_SetDestructor(PyObject *capsule, PyCapsule_Destructor destructor)¶
- Teil der Stable ABI.
Setzt den Destruktor innerhalb von capsule auf destructor.
Gibt bei Erfolg
0zurück. Gibt andernfalls einen Wert ungleich Null zurück und setzt eine Ausnahme.
-
int PyCapsule_SetName(PyObject *capsule, const char *name)¶
- Teil der Stable ABI.
Setzt den Namen innerhalb von capsule auf name. Wenn name nicht
NULList, muss der Name die Kapsel überdauern. Wenn der vorherige in der Kapsel gespeicherte name nichtNULLwar, wird keine Freigabe versucht.Gibt bei Erfolg
0zurück. Gibt andernfalls einen Wert ungleich Null zurück und setzt eine Ausnahme.
-
int PyCapsule_SetPointer(PyObject *capsule, void *pointer)¶
- Teil der Stable ABI.
Setzt den Void-Zeiger innerhalb von capsule auf pointer. Der Zeiger darf nicht
NULLsein.Gibt bei Erfolg
0zurück. Gibt andernfalls einen Wert ungleich Null zurück und setzt eine Ausnahme.