E.Z*_*.Z. 6 python destructor python-2.4
我了解到,蟒蛇并 没有 保证的是__del__当一个对象被删除时调用.换句话说,del x 并不一定调用析构函数x.__del__().
如果我想确保正确的对象清理,我应该使用上下文管理器(在with语句中).
我知道这很愚蠢,但出于几个原因(请不要问为什么)我与Python 2.4绑定了系统; 因此上下文管理器是不可能的(它们是在Python 2.5中引入的)
所以我需要一个替代解决方案,因此我的问题是:是否有可以帮助我__del__可靠使用的最佳实践?我正在思考"如果python提供这样的功能,必须有一种方法可以有效地使用它(我只是愚蠢地弄清楚如何)",,,
或者我只是天真,应该忘记__del__并继续采用完全不同的方法?
简而言之:不,没有办法确保它被调用.
答案是自己实现上下文管理器.一个with说法大致翻译:
x.__enter__()
try:
...
finally:
x.__exit__()
Run Code Online (Sandbox Code Playgroud)
所以只需手动完成.它比这复杂一点,所以我建议阅读PEP 343以充分理解上下文管理器的工作方式.
一种选择是调用清理功能close(),然后在未来版本的python中,人们可以轻松contextlib.closing地将其转换为真正的上下文管理器.
而不是__del__给你的类一个类似的方法close,然后显式调用:
foo = Foo()
try:
foo.do_interesting_stuff()
finally:
foo.close()
Run Code Online (Sandbox Code Playgroud)
为了额外的安全性和前向兼容性,请拥有__exit__并__del__致电close.
| 归档时间: |
|
| 查看次数: |
1385 次 |
| 最近记录: |