弱参考对象

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 回调)

    • 返回值:新参考.

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

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

  • PyObject * PyWeakref_GetObject(PyObject ** ref *)
    • *返回值:借用参考。

从弱引用* ref *返回引用的对象。如果引用对象不再有效,则返回Py_None

Note

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

  • PyObject * PyWeakref_GET_OBJECT(PyObject ** ref *)
    • *返回值:借用参考。

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