弱参照オブジェクト

Python は 弱参照 を第一級オブジェクト (first-class object) としてサポートします。弱参照を直接実装する二種類の固有のオブジェクト型があります。第一は単純な参照オブジェクトで、第二はオリジナルのオブジェクトに対して可能な限りプロキシとして振舞うオブジェクトです。

int PyWeakref_Check(ob)

ob が参照オブジェクトかプロキシオブジェクトの場合に真を返します。

int PyWeakref_CheckRef(ob)

ob が参照オブジェクトの場合に真を返します。

int PyWeakref_CheckProxy(ob)

ob がプロキシオブジェクトの場合に真を返します。

PyObject* PyWeakref_NewRef(PyObject *ob, PyObject *callback)
Return value: New reference.

ob に対する弱参照オブジェクトを返します。この関数は常に新たな参照を返しますが、必ずしも新たなオブジェクトを作る保証はありません; 既存の参照オブジェクトが返されることもあります。第二のパラメタ callback は呼び出し可能オブジェクトで、 ob がガーベジコレクションされた際に通知を受け取ります; callback は弱参照オブジェクト自体を単一のパラメタとして受け取ります。 callbackNoneNULL にしてもかまいません。 ob が弱参照できないオブジェクトの場合や、 callback が呼び出し可能オブジェクト、 NoneNULL のいずれでもない場合は、 NULL を返して TypeError を送出します。

PyObject* PyWeakref_NewProxy(PyObject *ob, PyObject *callback)
Return value: New reference.

ob に対する弱参照プロキシオブジェクトを返します。この関数は常に新たな参照を返しますが、必ずしも新たなオブジェクトを作る保証はありません; 既存の参照オブジェクトが返されることもあります。第二のパラメタ callback は呼び出し可能オブジェクトで、 ob がガーベジコレクションされた際に通知を受け取ります; callback は弱参照オブジェクト自体を単一のパラメタとして受け取ります。 callbackNoneNULL にしてもかまいません。 ob が弱参照できないオブジェクトの場合や、 callback が呼び出し可能オブジェクト、 NoneNULL のいずれでもない場合は、 NULL を返して TypeError を送出します。

PyObject* PyWeakref_GetObject(PyObject *ref)
Return value: Borrowed reference.

弱参照 ref が参照しているオブジェクトを返します。被参照オブジェクトがすでに存続していない場合、 Py_None を返します。

注釈

この関数は参照先オブジェクトの 借り物の参照 を返します。そのため、そのオブジェクトを利用している間そのオブジェクトが破棄されないことが判っている場合を除き、常に Py_INCREF() を呼び出すべきです。

PyObject* PyWeakref_GET_OBJECT(PyObject *ref)
Return value: Borrowed reference.

PyWeakref_GetObject() に似ていますが、マクロで実装されていて、エラーチェックを行いません。