在Python2.x中,我应该调用object.\u del\u?
在Python3.x中,所有类都是在Python2.x中,我应该调用object.\u del\u?,python,subclass,destructor,python-2.x,Python,Subclass,Destructor,Python 2.x,在Python3.x中,所有类都是object的子类。在2.x中,您必须显式地声明类MyClass(object)。而且,当我试图编写尽可能多的3.x兼容代码时,我正在子类化object 在我的程序中,我使用的是方法,我想知道我是否应该调用对象 谢谢, 韦恩 编辑: 我的意思似乎有些混乱——在文件中,它指出: 如果基类具有\uuu del\uuu()方法,则派生类的\uuu del\uuu()方法(如果有)必须显式调用它,以确保正确删除实例的基类部分 所以我想知道我是否需要: def __del
object
的子类。在2.x中,您必须显式地声明类MyClass(object)
。而且,当我试图编写尽可能多的3.x兼容代码时,我正在子类化object
在我的程序中,我使用的是方法,我想知道我是否应该调用对象
谢谢,
韦恩
编辑:
我的意思似乎有些混乱——在文件中,它指出:
如果基类具有\uuu del\uuu()
方法,则派生类的\uuu del\uuu()
方法(如果有)必须显式调用它,以确保正确删除实例的基类部分
所以我想知道我是否需要:
def __del__(self):
object.__del__(self)
或者一些合适的替代方法。\uuu del\uuu
不是用来调用的。当对象没有更多引用并被收集时,析构函数将自动执行
相反,您不调用\uuuu init\uuuu
,而是在创建对象时自动处理。调用\uuu del\uu
不会破坏对象,这样做实际上可能会导致意外行为 检查并确认。您不需要在对象上调用\uuu del\uu
方法,因为垃圾收集器应该为您执行此操作。只要编写一个正确的\uuuuu del\uuuu
方法,python就会为您处理。好吧,对象实际上没有\uu del\uuu
方法,所以不需要调用它
>>> object().__del__
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute '__del__'
>>>对象()。\u__
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:'object'对象没有属性'\u del\u'
你到底为什么打电话给\uu del\uu
?这有什么可能的目的呢?为什么不使用del
语句并避免这种情况?你在做一些超级(类,自我)的事吗?为什么?@S.Lott,的文档提到调用超类的\u del\u
,我找不到任何关于将\u del\u
与子类化对象结合使用的信息。我没有想到仅仅内省对象
,以发现它没有\uu del\uuu
,但现在我知道了。我似乎没有清楚地沟通-我没有调用我对象的\uu del\uu
-我(希望)在编辑中澄清了我的问题。