Python:无法通过super()调用父类析构函数

7 投票
1 回答
5683 浏览
提问于 2025-04-18 02:05

我无法在子类的析构函数中调用父类的析构函数。请看下面的代码:

class BaseClass(object):
    def __del__(self):
        print 'BaseClass->Destructor'

class DerivativeClass(BaseClass):
    def __del__(self):
        print 'DerivativeClass->Destructor'
        #Invoke destructor of the base class, it works 
        BaseClass.__del__(self)           
        #Doesn't work
        #super(DerivativeClass, self).__del__() 

instance = DerivativeClass()

当我在 DerivativeClass.__del__() 中使用 super(DerivativeClass, self).__del__() 时,出现了以下错误:

Exception TypeError: 'must be type, not None' in <bound method 
DerivativeClass.__del__ of <__main__.DerivativeClass object at 0xb73a682c>> ignored

问题:

为什么我不能在子类的析构函数中使用 super,而在子类的构造函数中使用却没有问题呢?

1 个回答

7

看起来这个问题只在程序运行结束时出现(因为 DerivativeClassNone)。

这个代码运行得很好:

class BaseClass(object):
    def __del__(self):
        print 'BaseClass->Destructor'

class DerivativeClass(BaseClass):
    def __del__(self):
        print 'DerivativeClass->Destructor'
        super(DerivativeClass, self).__del__() 

instance = DerivativeClass()
del instance

这个代码也运行得很好:

class BaseClass(object):
    def __del__(self):
        print 'BaseClass->Destructor'

class DerivativeClass(BaseClass):
    def __del__(self):
        print 'DerivativeClass->Destructor'
        super(type(self), self).__del__() 

instance = DerivativeClass()

还有这个:

class BaseClass(object):
    def __del__(self):
        print 'BaseClass->Destructor'

class DerivativeClass(BaseClass):
    def __del__(self):
        print 'DerivativeClass->Destructor'
        super(DerivativeClass, self).__del__() 

def someScope ():
    instance = DerivativeClass()

someScope ()

在代码片段1和3中,我确保实例在类之前就被销毁了。在代码片段2中,我用一种比较笨的方法绕过了这个问题。

撰写回答