在Python 3.x中,所有类都是object
的子类。在2.x中,您必须明确说明class MyClass(object)
。而且,由于我试图编写尽可能多的3.x兼容代码,我正在继承object
。
在我的程序中,我正在使用__del__
方法,我想知道我是否应该调用object.__del__(self)
,或者是否真的需要处理?
谢谢, 韦恩
编辑: 我的意思似乎有些混乱 - 在文件中说明:
如果基类具有
__del__()
方法,则派生类的__del__()
方法(如果有)必须显式调用它以确保正确删除实例的基类部分。
所以我想知道我是否需要:
def __del__(self):
object.__del__(self)
或一些合适的替代方案。
答案 0 :(得分:4)
__del__
无意调用。当对象没有更多引用并被收集时,将自动执行析构函数。
反之,您不会调用__init__
,但会在创建对象时自动处理。调用__del__
不会破坏对象,这样做实际上可能导致意外行为。
答案 1 :(得分:4)
检查http://docs.python.org/reference/datamodel.html#basic-customization和http://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__'