在 Python 中,有没有办法在对象完成后调用函数?
我认为弱引用中的回调会做到这一点,但似乎一旦对象被垃圾收集,但在调用对象__del__
方法之前,弱引用的回调就会被调用。这似乎与Python 主干中关于弱引用和垃圾收集的说明相反。这是一个例子。
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
有没有其他传统的方式来做我想做的事?我可以以某种方式强制我的回调完成吗?