弱参照オブジェクト
******************

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* は弱参照オブジェクト自体
   を単一のパラメタとして受け取ります。 *callback* は "None" や "NULL"
   にしてもかまいません。 *ob* が弱参照できないオブジェクトの場合や、
   *callback* が呼び出し可能オブジェクト、 "None" 、 "NULL" のいずれで
   もない場合は、 "NULL" を返して "TypeError" を送出します。

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

   *ob* に対する弱参照プロキシオブジェクトを返します。 この関数は常に
   新たな参照を返しますが、必ずしも新たなオブジェクトを作る保証はあり
   ません。既存のプロキシオブジェクトが返されることもあります。第二の
   パラメタ *callback* は呼び出し可能オブジェクトで、 *ob* がガーベジ
   コレクションされた際に通知を受け取ります。 *callback* は弱参照オブ
   ジェクト自体を単一のパラメタとして受け取ります。 *callback* は
   "None" や "NULL" にしてもかまいません。 *ob* が弱参照できないオブジ
   ェクトの場合や、 *callback* が呼び出し可能オブジェクト、 "None" 、
   "NULL" のいずれでもない場合は、 "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()" に似ていますが、マクロで実装されていて、エ
   ラーチェックを行いません。
