教程集 www.jiaochengji.com
教程集 >  Python编程  >  Python入门  >  正文 Python新手常见问题十:__del__方法

Python新手常见问题十:__del__方法

发布时间:2021-12-27   编辑:jiaochengji.com
教程集为您提供Python新手常见问题十:,,del,,方法等资源,欢迎您收藏本站,我们将为您提供最新的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了

[关闭]
~ ~