如何强制删除一个Python对象?
- 论坛
- 如何强制删除一个Python对象?
14 浏览
如何强制删除一个Python对象?
我对Python中的__del__
的细节很好奇,它应该在什么时候和为什么使用,以及它不应该用于什么。我通过痛苦的经验学到,它并不像人们最初期望的析构函数那样。它不是__new__
/ __init__
的相反操作。
class Foo(object): def __init__(self): self.bar = None def open(self): if self.bar != 'open': print 'opening the bar' self.bar = 'open' def close(self): if self.bar != 'closed': print 'closing the bar' self.bar = 'close' def __del__(self): self.close() if __name__ == '__main__': foo = Foo() foo.open() del foo import gc gc.collect()
我在文档中看到__del__()
方法不保证在解释器退出时仍存在的对象会被调用。
- 如何保证在解释器退出时,对于任何现存的
Foo
实例,bar都会关闭? - 在上面的代码片段中,bar是在
del foo
还是在gc.collect()
时关闭的...或者两者都不是?如果你想更精细地控制这些细节(例如,当对象没有引用时应该关闭bar),通常的实现方式是什么? - 当调用
__del__
时,是否保证__init__
已经被调用?如果__init__
引发异常会怎样?