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

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

int PyWeakref_Check(ob)

   Return true if *ob* is either a reference or proxy object.  This
   function always succeeds.

int PyWeakref_CheckRef(ob)

   Return true if *ob* is a reference object.  This function always
   succeeds.

int PyWeakref_CheckProxy(ob)

   Return true if *ob* is a proxy object.  This function always
   succeeds.

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()" に似ていますが、マクロで実装されていて、エ
   ラーチェックを行いません。
