Objekte auf dem Heap zuweisen¶
-
PyObject *_PyObject_New(PyTypeObject *type)¶
- Rückgabewert: neue Referenz.
-
PyVarObject *_PyObject_NewVar(PyTypeObject *type, Py_ssize_t size)¶
- Rückgabewert: neue Referenz.
-
PyObject *PyObject_Init(PyObject *op, PyTypeObject *type)¶
- Rückgabewert: geliehene Referenz. Teil der Stable ABI.
Initialisiert ein neu zugewiesenes Objekt op mit seinem Typ und seiner Anfangsreferenz. Gibt das initialisierte Objekt zurück. Andere Felder des Objekts werden nicht initialisiert. Trotz ihres Namens steht diese Funktion in keinem Zusammenhang mit der Methode „
__init__()“ des Objekts (Slot „tp_init“). Insbesondere ruft diese Funktion die Methode „__init__()“ des Objekts nicht auf.Im Allgemeinen sollten Sie diese Funktion als Low-Level-Routine betrachten. Verwenden Sie nach Möglichkeit „
tp_alloc“. Zur Implementierung von „tp_alloc“ für Ihren Typ sollten Sie „PyType_GenericAlloc()“ oder „PyObject_New()“ bevorzugen.Bemerkung
Diese Funktion initialisiert lediglich den Speicher des Objekts, der der Struktur „
PyObject“ entspricht. Der Rest wird nicht auf Null gesetzt.
-
PyVarObject *PyObject_InitVar(PyVarObject *op, PyTypeObject *type, Py_ssize_t size)¶
- Rückgabewert: geliehene Referenz. Teil der Stable ABI.
Diese Funktion bietet denselben Funktionsumfang wie
PyObject_Init()und initialisiert darüber hinaus die Längenangaben für ein Objekt mit variabler Größe.Bemerkung
This function only initializes some of the object’s memory. It does not zero the rest.
-
PyObject_New(TYPE, typeobj)¶
Weist ein neues Python-Objekt unter Verwendung des C-Strukturtyps TYPE und des Python-Objekttyps typeobj (
PyTypeObject*) zu, indem mitPyObject_Malloc()Speicher zugewiesen und dieser wie inPyObject_Init()initialisiert wird. Der Aufrufer besitzt die einzige Referenz auf das Objekt (d.h., dessen Referenzzähler beträgt eins).Rufe dies nicht direkt auf, um Speicher für ein Objekt zu reservieren; nutze stattdessen den
tp_alloc-Slot des Typs.Beim Befüllen des Slots
tp_alloceines Typs ist die Verwendung vonPyType_GenericAlloc()einer benutzerdefinierten Funktion vorzuziehen, die dieses Makro lediglich aufruft.Dieses Makro ruft weder
tp_allocnochtp_new(__new__()) nochtp_init(__init__()) auf.Dies kann nicht für Objekte verwendet werden, bei denen unter
tp_flagsdie Option „Py_TPFLAGS_HAVE_GC“ aktiviert ist; verwenden Sie stattdessenPyObject_GC_New.Der durch dieses Makro zugewiesene Speicher muss mit `
PyObject_Free()` freigegeben werden (in der Regel über den Slot `tp_free` des Objekts aufgerufen).Bemerkung
Es kann nicht garantiert werden, dass der zurückgegebene Speicherbereich vor der Initialisierung vollständig auf Null gesetzt wurde.
Bemerkung
Dieses Makro erstellt kein vollständig initialisiertes Objekt des angegebenen Typs; es reserviert lediglich Speicher und bereitet diesen für die weitere Initialisierung durch
tp_initvor. Um ein vollständig initialisiertes Objekt zu erstellen, rufen Sie stattdessen typeobj auf. Beispiel:PyObject *foo = PyObject_CallNoArgs((PyObject *)&PyFoo_Type);
-
PyObject_NewVar(TYPE, typeobj, size)¶
Ähnlich wie „
PyObject_New“, nur dass:Es reserviert ausreichend Speicherplatz für die Struktur TYPE sowie für size (
Py_ssize_t) Felder mit der Größe, die durch das Feld „tp_itemsize“ von typeobj angegeben wird.Der Speicher wird wie folgt initialisiert:
PyObject_InitVar().
Dies ist nützlich für die Implementierung von Objekten wie Tupeln, deren Größe bereits bei der Erstellung bestimmt werden kann. Durch die Einbettung des Feldarrays in denselben Speicherbereich wird die Anzahl der Speicherzuweisungen reduziert, was die Effizienz der Speicherverwaltung verbessert.
Rufe dies nicht direkt auf, um Speicher für ein Objekt zu reservieren; nutze stattdessen den
tp_alloc-Slot des Typs.Beim Befüllen des Slots
tp_alloceines Typs ist die Verwendung vonPyType_GenericAlloc()einer benutzerdefinierten Funktion vorzuziehen, die dieses Makro lediglich aufruft.Dies kann nicht für Objekte verwendet werden, bei denen unter
tp_flagsdie Option „Py_TPFLAGS_HAVE_GC“ aktiviert ist; verwenden Sie stattdessenPyObject_GC_NewVar.Der von dieser Funktion zugewiesene Speicher muss mit `
PyObject_Free()` freigegeben werden (in der Regel über den Slot `tp_free` des Objekts aufgerufen).Bemerkung
Es kann nicht garantiert werden, dass der zurückgegebene Speicherbereich vor der Initialisierung vollständig auf Null gesetzt wurde.
Bemerkung
Dieses Makro erstellt kein vollständig initialisiertes Objekt des angegebenen Typs; es reserviert lediglich Speicher und bereitet diesen für die weitere Initialisierung durch
tp_initvor. Um ein vollständig initialisiertes Objekt zu erstellen, rufen Sie stattdessen typeobj auf. Beispiel:PyObject *list_instance = PyObject_CallNoArgs((PyObject *)&PyList_Type);
-
PyObject _Py_NoneStruct¶
Objekt, das in Python als „
None“ sichtbar ist. Der Zugriff darauf sollte ausschließlich über das Makro „Py_None“ erfolgen, das einen Zeiger auf dieses Objekt zurückgibt.
Siehe auch
- Module Objects
Erweiterungsmodule zuweisen und erstellen.
Aliase, die nur noch als „Soft-Deprecated“ gelten¶
Sanft abgekündigt <Soft deprecated> seit Version 3.10.
Dies sind Aliase für bereits vorhandene Funktionen und Makros. Sie dienen ausschließlich der Abwärtskompatibilität.
Alias, der nur noch eingeschränkt unterstützt wird |
Funktion |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|