Weak Reference Objects

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被垃圾回收时接收通知的可调用对象;它应该接受一个单一的参数,这将是弱引用对象本身。回调也可以是NoneNULL如果ob不是弱引用对象,或回调不可调用,NoneNULL这将返回NULL和引发TypeError

PyObject* PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
返回值:新引用。

返回对象ob的弱引用代理对象。这将总是返回一个新的引用,但不能保证创建一个新的对象;可以返回现有的代理对象。第二个参数callback可以是当ob被垃圾回收时接收通知的可调用对象;它应该接受一个单一的参数,这将是弱引用对象本身。回调也可以是NoneNULL如果ob不是弱引用对象,或回调不可调用,NoneNULL这将返回NULL和引发TypeError

PyObject* PyWeakref_GetObject(PyObject *ref)
返回值:借用引用。

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

注意

此函数将借用引用返回到引用的对象。这意味着你应该总是调用Py_INCREF()对象,除非你知道它不能被销毁,而你仍在使用它。

PyObject* PyWeakref_GET_OBJECT(PyObject *ref)
返回值:借用引用。

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