__del__
が行うすべてのものをやってからではなく、はるかに強い保証(呼び出しはインタプリタが終了する前に行われる、と呼び出しの順序が明確に定義されていること、例えば、finalize
保証など)とweakref
を防止する任意の障害はありますか?`weakref`コールバックが` __del__`を置き換えることができますか?
遠い過去には、it was thoughtのように、weakref
は、最終的に言語から__del__
の削除につながると思われます。
何が起こるのを防ぎましたか?
few use cases for __del__
と思われますが、私が知っていることはすべて、少なくともweakref
コールバックまたはweakref.finalize
で動作するように思われます。
更新:PEP 442で
が劇的__del__
の動作を改善し、@gzとの@ user2357112で言及weakref
との懸念は、私は言語は、一般的に__del__
は、より信頼性の高い作りに向けて動いている場合不思議、または向けましたよ__del__
の代わりにweakref
、またはその両方を使用してください。
*「これが起こらないようにしたのは何ですか?」*これは、ごく少数の人が答えられるかもしれないという質問です。私はあなたが 'python-list'にこれを投稿し、うまくいけばいくつかのコア開発者の関心を引くことをお勧めします。 –
Pythonのweakrefサポートはかなり悪いので、weakrefをweakrefにしたいと思うたくさんのオブジェクトタイプにすることはできません。これは普通あなたが書いている型には関係ありませんが、あなたの型が 'tuple'のようなものなら、それを弱めることはできません。 – user2357112
また、weakrefコールバックは参照対象にアクセスできないため、より慎重な設計が必要です。 – user2357112