在python 2.x中我应该调用object .__ del__吗?

时间:2010-11-16 22:21:16

标签: python subclass destructor python-2.x

在Python 3.x中,所有类都是object的子类。在2.x中,您必须明确说明class MyClass(object)。而且,由于我试图编写尽可能多的3.x兼容代码,我正在继承object

在我的程序中,我正在使用__del__方法,我想知道我是否应该调用object.__del__(self),或者是否真的需要处理?

谢谢, 韦恩

编辑: 我的意思似乎有些混乱 - 在文件中说明:

  

如果基类具有__del__()方法,则派生类的__del__()方法(如果有)必须显式调用它以确保正确删除实例的基类部分。

所以我想知道我是否需要:

def __del__(self):
    object.__del__(self)

或一些合适的替代方案。

3 个答案:

答案 0 :(得分:4)

__del__无意调用。当对象没有更多引用并被收集时,将自动执行析构函数。

反之,您不会调用__init__,但会在创建对象时自动处理。调用__del__不会破坏对象,这样做实际上可能导致意外行为。

答案 1 :(得分:4)

检查http://docs.python.org/reference/datamodel.html#basic-customizationhttp://docs.python.org/library/gc.html#module-gc。您不需要在对象上调用__del__方法,因为垃圾收集器应该为您执行此操作。只需编写一个正确的__del__方法,python就会为你处理它。

答案 2 :(得分:2)

好吧,object实际上没有__del__方法,所以不,你不需要调用它。

>>> object().__del__
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute '__del__'