弱引用物件¶
Python 支援作為一等物件的弱引用。有兩種特定的物件型別直接實現弱引用。第一種是簡單的引用物件,第二種在儘可能的情況下充當原始物件的代理。
-
PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)¶
- 返回值:新引用。 穩定 ABI 的一部分。
返回物件 ob 的弱引用物件。這將始終返回新的引用,但不保證建立新物件;可能會返回現有的引用物件。第二個引數 callback 可以是可呼叫物件,在 ob 被垃圾回收時接收通知;它應該接受一個引數,即弱引用物件本身。callback 也可以是
None
或NULL
。如果 ob 不是可弱引用的物件,或者 callback 不是可呼叫物件、None
或NULL
,則會返回NULL
並引發TypeError
。
-
PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)¶
- 返回值:新引用。 穩定 ABI 的一部分。
返回物件 ob 的弱引用代理物件。這將始終返回新的引用,但不保證建立新物件;可能會返回現有的代理物件。第二個引數 callback 可以是可呼叫物件,在 ob 被垃圾回收時接收通知;它應該接受一個引數,即弱引用物件本身。callback 也可以是
None
或NULL
。如果 ob 不是可弱引用的物件,或者 callback 不是可呼叫物件、None
或NULL
,則會返回NULL
並引發TypeError
。
-
int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)¶
- 自版本 3.13 起為 穩定 ABI 的一部分。
從弱引用 ref 獲取對被引用物件的強引用,放入 *pobj 中。
成功時,將 *pobj 設定為指向被引用物件的新的 強引用,並返回 1。
如果引用已死,則將 *pobj 設定為
NULL
並返回 0。發生錯誤時,引發異常並返回 -1。
在版本 3.13 中新增。
-
PyObject *PyWeakref_GetObject(PyObject *ref)¶
- 返回值:借用引用。 穩定 ABI 的一部分。
從弱引用 ref 返回對被引用物件的借用引用。如果被引用物件不再有效,則返回
Py_None
。註釋
此函式返回對被引用物件的借用引用。這意味著您應該始終對物件呼叫
Py_INCREF()
,除非在借用引用的最後一次使用之前它不能被銷燬。自版本 3.13 起已棄用,將在版本 3.15 中刪除: 請改用
PyWeakref_GetRef()
。
-
PyObject *PyWeakref_GET_OBJECT(PyObject *ref)¶
- 返回值:借用引用。
類似於
PyWeakref_GetObject()
,但不進行錯誤檢查。自版本 3.13 起已棄用,將在版本 3.15 中刪除: 請改用
PyWeakref_GetRef()
。
-
void PyObject_ClearWeakRefs(PyObject *object)¶
- 屬於 穩定 ABI 的一部分。
此函式由
tp_dealloc
處理程式呼叫以清除弱引用。此函式遍歷 object 的弱引用,併為那些具有回撥函式的弱引用呼叫回撥函式。當所有回撥函式嘗試呼叫完畢後,函式返回。
-
void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)¶
- 這是一個不穩定的 API。它可能會在次要版本中更改,恕不另行通知。
清除 object 的弱引用,但不呼叫回撥函式。
此函式由具有終結器的型別(即,
__del__()
)的tp_dealloc
處理程式呼叫。這些物件的處理程式首先呼叫PyObject_ClearWeakRefs()
來清除弱引用並呼叫它們的回撥函式,然後呼叫終結器,最後呼叫此函式來清除終結器可能建立的任何弱引用。在大多數情況下,使用
PyObject_ClearWeakRefs()
清除弱引用比使用此函式更合適。在版本 3.13 中新增。