弱参照オブジェクト¶
Python は 弱参照 を第一級オブジェクト (first-class object) としてサポートします。弱参照を直接実装する二種類の固有のオブジェクト型があります。第一は単純な参照オブジェクトで、第二はオリジナルのオブジェクトに対して可能な限りプロキシとして振舞うオブジェクトです。
-
int PyWeakref_CheckRefExact(PyObject *ob)¶
obが弱参照型のインスタンスであり、サブクラスのインスタンスではない場合に非ゼロを返します。 この関数は常に成功します。
-
PyObject *PyWeakref_NewRef(PyObject *ob, PyObject *callback)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI.
オブジェクト
obに対する弱参照オブジェクトを返します。 常に新しい参照を返しますが、新しいオブジェクトが作成されるとは限りません。 既存の弱参照オブジェクトを返す場合があります。 第 2 引数callbackには、obがガベージコレクションで回収されたときに通知を受け取る呼び出し可能オブジェクトを指定できます。 このオブジェクトは、弱参照オブジェクト自身を唯一の引数として受け取る必要があります。callbackはNoneまたはNULLでも構いません。obが弱参照を作成できるオブジェクトでない場合はTypeErrorを送出してNULLを返します。参考
obが弱参照を作成できるオブジェクトかどうかを調べるにはPyType_SUPPORTS_WEAKREFS()を参照してください。
-
PyObject *PyWeakref_NewProxy(PyObject *ob, PyObject *callback)¶
- 戻り値: 新しい参照。 次に属します: Stable ABI.
Return a weak reference proxy object for the object ob. This will always return a new reference, but is not guaranteed to create a new object; an existing proxy object may be returned. The second parameter, callback, can be a callable object that receives notification when ob is garbage collected; it should accept a single parameter, which will be the weak reference object itself. callback may also be
NoneorNULL. If ob weakly referenceable object, this will raiseTypeErrorand returnNULL.参考
obが弱参照を作成できるオブジェクトかどうかを調べるにはPyType_SUPPORTS_WEAKREFS()を参照してください。
-
int PyWeakref_GetRef(PyObject *ref, PyObject **pobj)¶
- 次に属します: Stable ABI (バージョン 3.13 より).
弱参照
refから参照先のオブジェクトへの 強参照 を取得し、*pobjに格納します。成功した場合は、参照先のオブジェクトへの新しい 強参照 を
*pobjに設定し、1 を返します。参照先が消滅している場合は、
*pobjをNULLに設定し、0 を返します。エラーの場合は例外を送出し、-1 を返します。
Added in version 3.13.
-
int PyWeakref_IsDead(PyObject *ref)¶
弱参照
refの参照先が消滅しているかどうかを調べます。 参照先が消滅していれば 1、生存していれば 0 を返します。refが弱参照オブジェクトでなければ、エラーを設定して -1 を返します。Added in version 3.14.
-
void PyObject_ClearWeakRefs(PyObject *object)¶
- 次に属します: Stable ABI.
この関数は、弱参照をクリアするために
tp_deallocハンドラから呼び出されます。objectへの弱参照を順に調べ、コールバックを持つものについてはそのコールバックを呼び出します。 すべてのコールバックの呼び出しを試みた後で戻ります。
-
PyObject **PyObject_GET_WEAKREFS_LISTPTR(PyObject *object)¶
objectへの弱参照を保持する内部のリンクリストへのポインタを返します。objectは弱参照をサポートしている必要があり、NULLであってはいけません。この関数は内部での使用のみを目的としています。 返されたポインタを通じて弱参照リストにアクセスしたり、変更したりしないでください。
バージョン 3.15.2 で ソフト非推奨 <Soft deprecated>.
-
void PyUnstable_Object_ClearWeakRefsNoCallbacks(PyObject *object)¶
- これは Unstable APIです。マイナーリリースで予告なく変更されることがあります。
コールバックを呼び出さずに
objectへの弱参照をクリアします。この関数は、ファイナライザ (つまり
__del__()) を持つ型のtp_deallocハンドラから呼び出されます。 このようなオブジェクトのハンドラは、まずPyObject_ClearWeakRefs()を呼び出して弱参照をクリアし、そのコールバックを呼び出します。 次にファイナライザを呼び出し、最後にこの関数を呼び出してファイナライザが作成した可能性のある弱参照をクリアします。ほとんどの場合、弱参照のクリアにはこの関数よりも
PyObject_ClearWeakRefs()を使う方が適切です。Added in version 3.13.