弱引用对象 — 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。 此功能总是成功。
- 返回对象 ob 的弱引用对象。 这将始终返回一个新的引用,但不保证会创建一个新对象; 可能会返回现有的引用对象。 第二个参数,callback,可以是一个可调用对象,当ob被垃圾回收时接收通知; 它应该接受一个参数,这将是弱引用对象本身。 callback 也可以是
None
或NULL
。 如果 ob 不是弱引用对象,或者 callback 不可调用、None
或NULL
,这将返回NULL
并引发 TypeError。
- 返回对象 ob 的弱引用代理对象。 这将始终返回一个新的引用,但不保证会创建一个新对象; 可能会返回现有的代理对象。 第二个参数,callback,可以是一个可调用对象,当ob被垃圾回收时接收通知; 它应该接受一个参数,这将是弱引用对象本身。 callback 也可以是
None
或NULL
。 如果 ob 不是弱引用对象,或者 callback 不可调用、None
或NULL
,这将返回NULL
并引发 TypeError。
- PyObject *PyWeakref_GetObject(PyObject *ref)
从弱引用返回被引用的对象,ref。 如果所指对象不再存在,则返回
Py_None
。笔记
此函数返回一个 借用引用 到被引用对象。 这意味着您应该始终在对象上调用 Py_INCREF() ,除非您知道它在您仍在使用时无法销毁。
- 与 PyWeakref_GetObject() 类似,但实现为不进行错误检查的宏。