抢先__del__嗯

时间:2009-10-15 22:52:43

标签: python class

我需要抢占__del__,我想知道这样做的正确方法是什么。基本上我在代码中的问题是这个..

class A:
    def __init__(self):
        self.log = logging.getLogger()
        self.log.debug("In init")
        self.closed = False

    def close(self):
        self.log.debug("Doing some magic")
        self.closed = True

    def __del__(self):
        if not self.closed:
            self.close()
        self.log.debug("In closing")

        # What should go here to properly do GC??

现在有什么方法可以调用标准的GC功能吗?

感谢您阅读!!

史蒂夫

3 个答案:

答案 0 :(得分:4)

__del__不是真正的析构函数。在对象被销毁之前调用它以释放它所持有的任何资源。它不必担心释放内存本身。

如果你继承了一个也可能有开放资源的类,你也可以随时调用父类'__del__

答案 1 :(得分:3)

请使用with声明。

请参阅http://docs.python.org/reference/compound_stmts.html#the-with-statement

  

with语句保证if   输入()方法不返回   错误,然后退出()将始终   被称为。

不要使用__del__,而是使用上下文管理器对象的__exit__

答案 2 :(得分:1)

如果您想手动调用GC,请调用gc.collect()。