【发布时间】:2017-03-22 19:48:18
【问题描述】:
我正在开发一个用 python 编写的 API。我使用this 文章作为对python 析构函数的帮助。
# api.py
class ApiCfg(object):
def __init__(self, ...):
# open a connection to a device
some_device_open()
def __del__(self):
print 'Close a connection to some_device'
# close a connection to a device
some_device_close()
# Some code
...
api_cfg = ApiCfg()
# myfile.py
from api import *
# Do some stuff
api.run()
一切完成后,我希望在屏幕上看到的是以下语句:Close connection to some device。但是由于某种原因我没有。有人可以解释为什么会这样吗?
【问题讨论】:
-
您是否创建了
A类的实例?如果是,请准确说明您如何称呼它。您首先需要创建它的实例并存储在某个变量中。然后它会在退出时自动销毁并执行del。 -
@RustemK 对不起。我犯了一个错误。
A是ApiCfg。现在修复它。 -
是的,Python 实际上并不能保证调用
__del__。__del__不可靠。它在替代 Python 实现上更不可靠,并且标准实现不保证引用计数机制将保持不变。 Python 不是 C++;尝试像依赖 C++ 析构函数一样依赖__del__是个坏主意。 -
@user2357112 那么关闭设备连接的建议是什么?
-
with声明,主要是。
标签: python python-2.7 destructor