弱参照オブジェクトは属性あるいはメソッドを持ちません。しかし、リファレントがまだ存在するならば、呼び出すことでそのリファレントを取得できるようにします:
>>> import weakref >>> class Object: ... pass ... >>> o = Object() >>> r = weakref.ref(o) >>> o2 = r() >>> o is o2 True
リファレントがもはや存在しないならば、参照オブジェクトの呼び出しはNoneを返します:
>>> del o, o2 >>> print r() None
弱参照オブジェクトがまだ生きているかどうかのテストは、式ref() is not None
を用いて行われます。通常、参照オブジェクトを使う必要があるアプリケーションコードはこのパターンに従います:
# rは弱参照オブジェクト o = r() if o is None: # リファレントがガーベジコレクトされた print "Object has been allocated; can't frobnicate." else: print "Object is still live!" o.do_something_useful()
``生存性(liveness)''のテストを個々に行うと、スレッド化されたアプリケーションにおいて競合状態を作り出します。弱参照が呼び出される前に、他のスレッドは弱参照が無効になる原因となり得ます。上で示したイディオムは、シングルスレッド化されたアプリケーションと同じくスレッド化されたアプリケーションにおいて安全です。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。