弱参考对象

Python 支持 弱引用 作为一流的对象。有两种特定的对象类型直接实现弱引用。第一个是一个简单的引用对象,第二个尽可能充当原始对象的代理。

int PyWeakref_Check(ob)

如果满足以下条件,则返回TRUE ob 可以是引用对象,也可以是代理对象。此功能总是成功的。

int PyWeakref_CheckRef(ob)

如果满足以下条件,则返回TRUE ob 是引用对象。此功能总是成功的。

int PyWeakref_CheckProxy(ob)

如果满足以下条件,则返回TRUE ob 是代理对象。此功能总是成功的。

PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Return value: New reference.

返回对象的弱引用对象 ob . 这将始终返回新的引用,但不保证创建新的对象;可能会返回现有的引用对象。第二个参数, 回调 ,可以是可调用对象,当 ob 是垃圾收集的;它应该接受单个参数,这将是弱引用对象本身。 回调 也可能是 NoneNULL . 如果 ob 不是弱可引用对象,或者如果 回调 不可调用, NoneNULL ,这将返回 NULL 并提高 TypeError .

PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Return value: New reference.

返回对象的弱引用代理对象 ob . 这将始终返回新引用,但不保证创建新对象;可能会返回现有代理对象。第二个参数, 回调 ,可以是可调用对象,当 ob 是垃圾收集的;它应该接受单个参数,这将是弱引用对象本身。 回调 也可能是 NoneNULL . 如果 ob 不是弱可引用对象,或者如果 回调 不可调用, NoneNULL ,这将返回 NULL 并提高 TypeError .

PyObject *PyWeakref_GetObject(PyObject *ref)
Return value: Borrowed reference.

从弱引用返回被引用对象, ref . 如果引用不再有效,则返回 Py_None .

注解

此函数返回一个 borrowed reference 添加到被引用的对象。这意味着您应该始终调用 Py_INCREF() 对象上,除非在上次使用借用的引用之前无法销毁该对象。

PyObject *PyWeakref_GET_OBJECT(PyObject *ref)
Return value: Borrowed reference.

类似 PyWeakref_GetObject() ,但实现为不进行错误检查的宏。