在Python 2.x中应该调用object.__del__吗?
在Python 3.x中,所有的类都是object
的子类。在2.x版本中,你需要明确地写出class MyClass(object)
。而为了尽量写出兼容3.x的代码,我也在继承object
。
在我的程序中,我使用了__del__
这个方法,我想知道我是否需要调用object.__del__(self)
,还是说这个问题已经自动处理好了?
谢谢,
Wayne
编辑:
看起来大家对我说的有些困惑——文档中提到:
如果一个基类有
__del__()
方法,那么派生类的__del__()
方法(如果有的话)必须明确调用它,以确保正确删除实例的基类部分。
所以我想知道我是否需要:
def __del__(self):
object.__del__(self)
或者其他合适的替代方案。
3 个回答
4
__del__
这个东西不是你自己去调用的。析构函数会在对象没有任何引用的时候自动执行,也就是当这个对象被清理的时候。
反过来说,你也不需要去调用 __init__
,它会在对象创建的时候自动处理。自己去调用 __del__
并不会销毁对象,反而可能会导致一些意想不到的情况发生。
4
可以查看一下这个链接 http://docs.python.org/reference/datamodel.html#basic-customization 和这个链接 http://docs.python.org/library/gc.html#module-gc。你不需要手动调用你对象的 __del__
方法,因为垃圾回收器会自动帮你处理这个。只要你写一个正确的 __del__
方法,Python 就会为你搞定这一切。
2
其实,object
这个东西并没有一个叫 __del__
的方法,所以你不需要去调用它。
>>> object().__del__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute '__del__'