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
ellerNULL
. Om ob inte är ett svagt refererbart objekt, eller om callback inte är anropbart,None
, ellerNULL
, kommer detta att returneraNULL
och ge upphov tillTypeError
.
-
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
ellerNULL
. Om ob inte är ett svagt refererbart objekt, eller om callback inte är anropbart,None
, ellerNULL
, kommer detta att returneraNULL
och ge upphov tillTypeError
.
-
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örstPyObject_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.