弱引用对象¶
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
。
-
PyObject *PyWeakref_GetObject(PyObject *ref)¶
- 返回值:借用引用。 稳定 ABI的一部分。
从弱引用ref返回引用的对象。如果引用的对象不再存在,则返回
Py_None
。注意
此函数返回对引用的对象的借用引用。这意味着你应该始终在对象上调用
Py_INCREF()
,除非它不能在借用引用最后一次使用之前被销毁。
-
PyObject *PyWeakref_GET_OBJECT(PyObject *ref)¶
- 返回值:借用引用。
类似于
PyWeakref_GetObject()
,但不进行错误检查。
-
void PyObject_ClearWeakRefs(PyObject *object)¶
- 稳定 ABI的一部分。
此函数由
tp_dealloc
处理程序调用以清除弱引用。这会遍历object的弱引用,并为具有弱引用的引用调用回调。当所有回调都尝试过时,它会返回。