Schwache Referenzobjekte

Python unterstützt *schwache Referenzen* als First-Class-Objekte. Es gibt zwei spezielle Objekttypen, die schwache Referenzen direkt implementieren. Der erste ist ein einfacher Referenztyp, und der zweite fungiert als Proxy für das ursprüngliche Objekt, so gut er kann.

int PyWeakref_Check(PyObject *ob)

Gibt ungleich Null zurück, wenn ob entweder ein Referenz- oder ein Proxy-Objekt ist. Diese Funktion ist immer erfolgreich.

int PyWeakref_CheckRef(PyObject *ob)

Gibt ungleich Null zurück, wenn ob ein Referenzobjekt ist. Diese Funktion ist immer erfolgreich.

int PyWeakref_CheckProxy(PyObject *ob)

Gibt ungleich Null zurück, wenn ob ein Proxy-Objekt ist. Diese Funktion ist immer erfolgreich.

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt ein schwaches Referenzobjekt für das Objekt ob zurück. Dies gibt immer eine neue Referenz zurück, garantiert aber nicht, dass ein neues Objekt erstellt wird; eine bestehende Referenz kann zurückgegeben werden. Der zweite Parameter, callback, kann ein aufrufbares Objekt sein, das benachrichtigt wird, wenn ob vom Garbage Collector bereinigt wird; es sollte einen einzigen Parameter akzeptieren, der die schwache Referenz selbst ist. callback kann auch None oder NULL sein. Wenn ob kein schwach referenzierbares Objekt ist oder wenn callback nicht aufrufbar, None oder NULL ist, gibt diese Funktion NULL zurück und löst einen TypeError aus.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Rückgabewert: Neue Referenz. Teil der Stabilen ABI.

Gibt einen schwachen Referenz-Proxy für das Objekt ob zurück. Dies gibt immer eine neue Referenz zurück, garantiert aber nicht, dass ein neues Objekt erstellt wird; ein bestehendes Proxy-Objekt kann zurückgegeben werden. Der zweite Parameter, callback, kann ein aufrufbares Objekt sein, das benachrichtigt wird, wenn ob vom Garbage Collector bereinigt wird; es sollte einen einzigen Parameter akzeptieren, der die schwache Referenz selbst ist. callback kann auch None oder NULL sein. Wenn ob kein schwach referenzierbares Objekt ist oder wenn callback nicht aufrufbar, None oder NULL ist, gibt diese Funktion NULL zurück und löst einen TypeError aus.

int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
Teil des Stable ABI seit Version 3.13.

Ruft eine starke Referenz auf das referenzierte Objekt aus einer schwachen Referenz ref in *pobj ab.

  • Bei Erfolg wird *pobj auf eine neue starke Referenz auf das referenzierte Objekt gesetzt und 1 zurückgegeben.

  • Wenn die Referenz tot ist, wird *pobj auf NULL gesetzt und 0 zurückgegeben.

  • Bei einem Fehler wird eine Ausnahme ausgelöst und -1 zurückgegeben.

Hinzugefügt in Version 3.13.

PyObject *PyWeakref_GetObject(PyObject *ref)
Rückgabewert: Ausgeliehene Referenz. Teil der Stable ABI.

Gibt eine entliehene Referenz auf das referenzierte Objekt aus einer schwachen Referenz ref zurück. Wenn das referenzierte Objekt nicht mehr lebendig ist, wird Py_None zurückgegeben.

Hinweis

Diese Funktion gibt eine entliehene Referenz auf das referenzierte Objekt zurück. Das bedeutet, dass Sie immer Py_INCREF() für das Objekt aufrufen sollten, es sei denn, es kann vor der letzten Verwendung der entliehenen Referenz nicht zerstört werden.

Veraltet seit Version 3.13, wird in Version 3.15 entfernt: Verwenden Sie stattdessen PyWeakref_GetRef().

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
Rückgabewert: Entliehene Referenz.

Ähnlich wie PyWeakref_GetObject(), aber ohne Fehlerprüfung.

Veraltet seit Version 3.13, wird in Version 3.15 entfernt: Verwenden Sie stattdessen PyWeakref_GetRef().

int PyWeakref_IsDead(PyObject *ref)

Prüft, ob die schwache Referenz ref tot ist. Gibt 1 zurück, wenn die Referenz tot ist, 0, wenn sie lebendig ist, und -1 mit gesetztem Fehler, wenn ref kein schwaches Referenzobjekt ist.

Hinzugefügt in Version 3.14.

void PyObject_ClearWeakRefs(PyObject *object)
Teil der Stable ABI.

Diese Funktion wird vom tp_dealloc-Handler aufgerufen, um schwache Referenzen zu löschen.

Dies iteriert durch die schwachen Referenzen für object und ruft Callbacks für diejenigen Referenzen auf, die einen haben. Es wird zurückgegeben, wenn alle Callbacks versucht wurden.

void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)
Dies ist eine Instabile API. Sie kann sich ohne Vorwarnung in kleineren Releases ändern.

Löscht die schwachen Referenzen für object, ohne die Callbacks aufzurufen.

Diese Funktion wird vom tp_dealloc-Handler für Typen mit Finalizern (d. h. __del__()) aufgerufen. Der Handler für solche Objekte ruft zuerst PyObject_ClearWeakRefs() auf, um schwache Referenzen zu löschen und ihre Callbacks aufzurufen, dann den Finalizer, und schließlich diese Funktion, um alle schwachen Referenzen zu löschen, die vom Finalizer erstellt worden sein könnten.

In den meisten Fällen ist es angebrachter, PyObject_ClearWeakRefs() zum Löschen schwacher Referenzen zu verwenden anstelle dieser Funktion.

Hinzugefügt in Version 3.13.