Python では、オブジェクトがファイナライズされた後に関数を呼び出す方法はありますか?
私はweakrefのコールバックがそれを行うと思っていましたが、オブジェクトがガベージコレクションされると、オブジェクト__del__
メソッドが呼び出される前にweakrefのコールバックが呼び出されるようです。これは、Python トランクの weakrefs とガベージ コレクションに関する注意事項に反するようです。これが例です。
import sys
import weakref
class Spam(object) :
def __init__(self, name) :
self.name = name
def __del__(self) :
sys.stdout.write("Deleting Spam:%s\n" % self.name)
sys.stdout.flush()
def cleaner(reference) :
sys.stdout.write("In callback with reference %s\n" % reference)
sys.stdout.flush()
spam = Spam("first")
wk_spam = weakref.ref(spam, cleaner)
del spam
私が得る出力は
$ python weakref_test.py
In callback with reference <weakref at 0xc760a8; dead>
Deleting Spam:first
私がやりたいことをするための他の従来の方法はありますか?コールバックでファイナライズを強制することはできますか?