在Python 2.x中应该调用object.__del__吗?

3 投票
3 回答
1372 浏览
提问于 2025-04-16 07:10

在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__'

撰写回答