【发布时间】:2016-05-31 01:06:43
【问题描述】:
我正在阅读有关在 Python 中清理对象的不同方法,我偶然发现了这些问题(1、2),它们基本上说使用__del__() 进行清理是不可靠的,下面的代码应该是避免:
def __init__(self):
rc.open()
def __del__(self):
rc.close()
问题是,我使用的正是这段代码,我无法重现上述问题中引用的任何问题。据我所知,我无法使用with 语句替代,因为我为闭源软件(testIDEA,有人吗?)提供了一个 Python 模块,该软件将创建特定类的实例并处理他们,这些实例必须准备好在两者之间提供服务。我看到的__del__() 的唯一替代方法是根据需要手动调用open() 和close(),我认为这很容易出错。
我明白,当我关闭解释器时,无法保证我的对象会被正确销毁(这并没有给我带来太多困扰,哎呀,即使是 Python 作者也认为没问题)。除此之外,我是不是用__del__()进行清理玩火?
【问题讨论】:
-
当解释器关闭时,
__exit__是否也能保证执行...? -
另外:我发现this link 在这个问题上很有帮助。
-
@RickTeachey 你把
__del__误认为__exit__,还是建议我在我的代码中使用__exit__?此外,我可以容忍关闭时出现的问题。 -
不,我的意思是,既然你说“我明白当我关闭解释器时,不能保证我的对象会被正确销毁......”这似乎暗示@ 987654337@ 将在这种情况下执行。我很想说不会,但意识到我实际上并不知道答案。抱歉 - 这更像是一个侧面评论。
-
@DmitryGrigoryev 答案seems to be NO。
标签: python destructor