假设我们有一个python类:
class A(object):
def __del__(self):
print "Del!"
在删除任何实例的A
时调用__del__
。
对一个班级也可以这样做吗?我想在类本身被垃圾收集时调用一些方法,我假设这是在脚本退出时完成的。
提前感谢你的指点!
编辑:正如我所料,每个人都在试图让我远离使用这种技术(我可能会自己发表这样的评论:),尽管问题仍然存在:这可能吗?
我想如下:我有一个需要清理的静态成员的类。
class A(object):
class Meta(type):
def __new__(mcs, name, bases, attrs):
attrs['conn'] = sqlite3.connect( DB_FILE )
return type.__new__(mcs, name, bases, attrs)
__metaclass__ = Meta
我想调用A.conn.close()
,但就在程序关闭之前,即当我知道不再创建A
的实例时。我知道我可以用atexit
来做,但这看起来很难看。
问题是类包含返回自身的循环引用,因此当它们被删除时,它们不容易被收集,因此不调用元类的
__del__
方法。我可以使用Pypy的Python实现调用它,但不能使用cpython-2.6或3.2。即使要触发它,我也必须手动调用垃圾收集器- 众所周知,程序出口处的Python环境充满了不一致性,当存在足够的类内部信息以允许sae关闭时,调用
__del__
方法的可能性非常小。这是我的Pypy会话,我在其中触发了对类
__del__
的调用相关问题 更多 >
编程相关推荐