弱引用对象 — Python 文档

来自菜鸟教程
Python/docs/3.9/c-api/weakref
跳转至:导航、​搜索

弱引用对象

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

int PyWeakref_Check(ob)
如果 ob 是引用或代理对象,则返回 true。 此功能总是成功。
int PyWeakref_CheckRef(ob)
如果 ob 是引用对象,则返回 true。 此功能总是成功。
int PyWeakref_CheckProxy(ob)
如果 ob 是代理对象,则返回 true。 此功能总是成功。
PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)
返回对象 ob 的弱引用对象。 这将始终返回一个新的引用,但不保证会创建一个新对象; 可能会返回现有的引用对象。 第二个参数,callback,可以是一个可调用对象,当ob被垃圾回收时接收通知; 它应该接受一个参数,这将是弱引用对象本身。 callback 也可以是 NoneNULL。 如果 ob 不是弱引用对象,或者 callback 不可调用、NoneNULL,这将返回 NULL 并引发 TypeError
PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
返回对象 ob 的弱引用代理对象。 这将始终返回一个新的引用,但不保证会创建一个新对象; 可能会返回现有的代理对象。 第二个参数,callback,可以是一个可调用对象,当ob被垃圾回收时接收通知; 它应该接受一个参数,这将是弱引用对象本身。 callback 也可以是 NoneNULL。 如果 ob 不是弱引用对象,或者 callback 不可调用、NoneNULL,这将返回 NULL 并引发 TypeError
PyObject *PyWeakref_GetObject(PyObject *ref)

从弱引用返回被引用的对象,ref。 如果所指对象不再存在,则返回 Py_None

笔记

此函数返回一个 借用引用 到被引用对象。 这意味着您应该始终在对象上调用 Py_INCREF() ,除非您知道它在您仍在使用时无法销毁。

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