Skip to main content
 首页 » 编程设计

python之自定义 __del__ 不存在

2025年05月04日16sxdcgaq8080

我有以下类(class):

class Item: 
    def __init__(self, type='new'): 
        self.type=type 
    def __del__(self): 
        print ('Deleted') 
        super().__del__() 
 
>>> i=Item() 
>>> del i 

AttributeError: 'super' object has no attribute 'del'

如果我使用自定义删除方法,我该如何正确删除该对象?

docs说每个对象都存在一个 __new__、__init__ 和 __del__,但在 python 3.6 中测试时我只看到两个:

>>> object.__new__ 
<built-in method __new__ of type object at 0x100922700> 
>>> object.__init__ 
<slot wrapper '__init__' of 'object' objects> 
>>> object.__del__ 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
AttributeError: type object 'object' has no attribute '__del__' 

我在这里错过了什么?

请您参考如下方法:

当数据模型文档说 object.__whatever__ 时,它们并不意味着 object 类有一个 __whatever__ 方法。它们的意思是,如果一个对象有一个 __whatever__ 方法,它的行为应该如以下文档所述,并且它将根据文档描述的原因被隐式调用。

object 本身并没有这些方法中的大部分。对于像 __del__ 这样的方法,如果您的父类(super class)没有该方法,就不要调用 super()。

此外,__del__ 不是 del Hook 或析构函数 - 它是终结器,在内存管理系统回收对象之前调用。使用 del 并不意味着对象的 __del__ 一定会被调用,并且 __del__ 不负责释放内存,所以你不必需要调用一些知道如何释放对象的父类(super class) __del__。