相关疑难解决方法(0)

如何正确清理Python对象?

class Package:
    def __init__(self):
        self.files = []

    # ...

    def __del__(self):
        for file in self.files:
            os.unlink(file)
Run Code Online (Sandbox Code Playgroud)

__del__(self)上面因AttributeError异常而失败.我理解Python__del__()调用时不保证存在"全局变量"(在此上下文中的成员数据?).如果是这种情况并且这是异常的原因,我该如何确保对象正确破坏?

python destructor

436
推荐指数
10
解决办法
40万
查看次数

是否依赖于__del __()来清除python中的不可靠?

我阅读不同的方式来清理对象在Python中,我已经对这些问题跌跌撞撞(1,2)基本上说,清理使用__del__()是不可靠的,下面的代码应避免:

def __init__(self):
    rc.open()

def __del__(self):
    rc.close()
Run Code Online (Sandbox Code Playgroud)

问题是,我正在使用这个代码,我无法重现上述问题中引用的任何问题.据我所知,我不能用with声明来替代,因为我为闭源软件提供了一个Python模块(testIDEA,任何人?)这个软件将创建特定类的实例并处理它们,这些实例必须准备好在两者之间提供服务.__del__()我看到的唯一替代方法是手动调用open()close()根据需要,我认为这将非常容易出错.

我明白,当我关闭解释器时,不能保证我的对象会被正确销毁(并且它不会打扰我,哎呀,即使是Python作者也认为它没问题).除此之外,我是否通过__del__()清理来玩火?

PS:我最初想在meta上发布一个关于无法复制的错误问题的咆哮,但意识到我不会得到我需要的技术细节.

python destructor

8
推荐指数
1
解决办法
906
查看次数

标签 统计

destructor ×2

python ×2