Python新手常见问题十:__del__方法
错误的使用__del__方法
假设有一个文件mod.py中这样使用:
<pre class="brush:php;toolbar:false">import foo class Bar(object): ... def __del__(self): foo.cleanup(self.myhandle)</pre>然后试图在another_mod.py里这样:
<pre class="brush:php;toolbar:false">import mod mybar = mod.Bar()</pre>那么你会得到一个恶心的AttributeError异常。
相关推荐:《Python视频教程》
为啥呢?这是因为(参考这里),当解释器关闭时,模块所有的全局变量会被置为空(None)。结果便如上例所示,当__del__被调用时,名字foo已经被置为空了。
使用atexit.register()可以解决这个问题。如此,当你的程序结束的时候(退出的时候),你的注册的处理程序会在解释器关闭之前处理。
这样理解的话,对上面的mod.py可以做如下的修改:
<pre class="brush:php;toolbar:false">import foo import atexit def cleanup(handle): foo.cleanup(handle) class Bar(object): def __init__(self): ... atexit.register(cleanup, self.myhandle)</pre>相关推荐:
Python新手常见问题九:不能区分py2和py3
您可能感兴趣的文章:
Python新手常见问题十:__del__方法
python del函数是什么以及如何使用?
Python新手常见问题八:标准库模块命名
Python __del__方法:销毁对象
新手学python看哪本书
Python新手常见问题二:不正确的使用类变量
笨办法学python3怎么样
学python能找什么工作
python语言什么时候发明的
学习Python却没看过这几本书,你就OUT了