weakref -- Python オブジェクトのライフタイム管理
このモジュールは、該当する CPython モジュールのサブセットを実装しています。
詳しくはオリジナルの CPython ドキュメンテーションを参照してください: weakref.
このモジュールを使うと、Python オブジェクトへの弱参照を作成できます。弱参照とは、ヒープに割り当てられた Python オブジェクトへの追跡不可能な参照のことです。そのため、弱参照が参照しているオブジェクトであっても、ガベージコレクタはオブジェクトを解放できます。
ガベージコレクタによってオブジェクトが解放されたときに呼び出されるようにPython のコールバック関数を登録できます。これにより、不要になったオブジェクトを安全にクリーンアップできます。
対応ポート: weakref モジュールは、コンパイル時に MICROPY_PY_WEAKREF を有効化する必要があります。unix (ライク)版と websssembly ベース pyscript 版では有効化されています。
ref オブジェクト
ref オブジェクトは、弱参照を作成する最も簡単な方法です。
- class weakref.ref(object, [callback, ]/)
指定されたオブジェクトへの弱参照を返します。
callback が指定されていて、かつ
Noneでない場合、 object がガベージコレクタによって回収される際に、弱参照オブジェクトがまだ存在する場合は callback が呼び出されます。 callback には、弱参照オブジェクトが唯一の引数として渡されます。
- ref.__call__()
弱参照オブジェクトを呼び出すと、参照先のオブジェクトがまだ存在する場合は、そのオブジェクトが返されます。そうでない場合は
Noneが返されます。
ファイナライズオブジェクト
ファイナライズオブジェクトは ref オブジェクトの拡張版であり、より使いやすく、コールバックをより詳細に制御できます。
- class weakref.finalize(object, callback, /, *args, **kwargs)
指定された object への弱参照を返します。 weakref.ref オブジェクトとは異なり、ファイナライズオブジェクトは内部的に保持され、 object が回収されるまでガベージコレクションされません。
ファイナライズオブジェクトは最初は生存状態です。明示的に呼び出された場合、またはオブジェクトが回収された場合、ファイナライズオブジェクトはデッド状態に遷移します。また
finalize.detach()メソッドが呼び出された場合もデッド状態に遷移しますobject がガベージコレクタによって回収されたとき(またはユーザーコードによって明示的にファイナライズオブジェクトが呼び出されたとき)、ファイナライズオブジェクトがまだ生存状態にある場合、コールバックが呼び出されます。コールバックには、次の引数が渡されます:
callback(*args, **kwargs)。
- finalize.__call__()
ファイナライズオブジェクトが生存している場合は、デッド状態に遷移し、
callback(*args, **kwargs)の値を返します。そうでない場合はNoneが返されます。
- finalize.alive()
ファイナライザがアクティブ状態にあるかどうかを示す読み取り専用のブール属性。
- finalize.peek()
ファイナライズオブジェクトが生存している場合は
(object, callback, args, kwargs)を返します。そうでない場合はNoneを返します。
- finalize.detach()
ファイナライズ対象オブジェクトが生存している場合はデッド状態に遷移して
(object, callback, args, kwargs)を返します。そうでない場合はNoneが返されます。