Svaga referensobjekt

Python stöder svaga referenser som förstklassiga objekt. Det finns två specifika objekttyper som direkt implementerar svaga referenser. Det första är ett enkelt referensobjekt, och det andra fungerar som en proxy för det ursprungliga objektet så mycket det kan.

int PyWeakref_Check(PyObject *ob)

Returnerar icke-noll om ob är antingen en referens eller ett proxyobjekt. Denna funktion lyckas alltid.

int PyWeakref_CheckRef(PyObject *ob)

Returnerar icke-noll om ob är ett referensobjekt. Denna funktion lyckas alltid.

int PyWeakref_CheckProxy(PyObject *ob)

Returnerar icke-noll om ob är ett proxyobjekt. Denna funktion lyckas alltid.

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett svagt referensobjekt för objektet ob. Detta kommer alltid att returnera en ny referens, men det är inte garanterat att ett nytt objekt skapas; ett befintligt referensobjekt kan returneras. Den andra parametern, callback, kan vara ett anropsbart objekt som får meddelande när ob garbage collected; det bör acceptera en enda parameter, som kommer att vara det svaga referensobjektet självt. callback kan också vara None eller NULL. Om ob inte är ett svagt refererbart objekt, eller om callback inte är anropbart, None, eller NULL, kommer detta att returnera NULL och ge upphov till TypeError.

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Returnera värde: Ny referens. En del av Stabil ABI.

Returnerar ett proxyobjekt med svag referens för objektet ob. Detta kommer alltid att returnera en ny referens, men det är inte garanterat att ett nytt objekt skapas; ett befintligt proxyobjekt kan returneras. Den andra parametern, callback, kan vara ett anropsbart objekt som får meddelande när ob samlas in; det bör acceptera en enda parameter, som kommer att vara själva det svaga referensobjektet. callback kan också vara None eller NULL. Om ob inte är ett svagt refererbart objekt, eller om callback inte är anropbart, None, eller NULL, kommer detta att returnera NULL och ge upphov till TypeError.

int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)
En del av Stabil ABI sedan version 3.13.

Hämta en strong reference till det refererade objektet från en svag referens, ref, till *pobj.

  • Vid framgång, sätt *pobj till en ny strong reference till det refererade objektet och returnera 1.

  • Om referensen är död, sätt *pobj till NULL och returnera 0.

  • Vid fel, skapa ett undantag och returnera -1.

Tillagd i version 3.13.

PyObject *PyWeakref_GetObject(PyObject *ref)
Returnera värde: Lånad referens. En del av Stabil ABI.

Returnerar en lånad referens till det refererade objektet från en svag referens, ref. Om referensen inte längre är levande, returneras Py_None.

Anteckning

Denna funktion returnerar en lånad referens till det refererade objektet. Detta innebär att du alltid bör anropa Py_INCREF() på objektet utom när det inte kan förstöras innan den sista användningen av den lånade referensen.

Deprecated since version 3.13, will be removed in version 3.15: Använd PyWeakref_GetRef() istället.

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
Returnera värde: Lånad referens.

Liknar PyWeakref_GetObject(), men gör ingen felkontroll.

Deprecated since version 3.13, will be removed in version 3.15: Använd PyWeakref_GetRef() istället.

int PyWeakref_IsDead(PyObject *ref)

Testar om den svaga referensen ref är död. Returnerar 1 om referensen är död, 0 om den är levande och -1 med en felinställning om ref inte är ett svagt referensobjekt.

Tillagd i version 3.14.

void PyObject_ClearWeakRefs(PyObject *object)
En del av Stabil ABI.

Denna funktion anropas av hanteraren tp_dealloc för att rensa svaga referenser.

Detta itererar genom de svaga referenserna för objekt och anropar callbacks för de referenser som har en sådan. Den returnerar när alla anrop har försökts.

void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)
Detta är Instabilt API. Den kan ändras utan förvarning i mindre versioner.

Rensar weakrefs för object utan att anropa callbacks.

Denna funktion anropas av tp_dealloc-hanteraren för typer med finalizers (dvs. __del__()). Hanteraren för dessa objekt anropar först PyObject_ClearWeakRefs() för att rensa weakrefs och anropa deras callbacks, sedan finalizern och slutligen denna funktion för att rensa alla weakrefs som kan ha skapats av finalizern.

Under de flesta omständigheter är det lämpligare att använda PyObject_ClearWeakRefs() för att rensa weakrefs istället för den här funktionen.

Tillagd i version 3.13.