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

Kon*_*tin 6 python destructor super

我无法从Child类的析构函数中调用Parent类的析构函数.请检查以下代码:

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()
Run Code Online (Sandbox Code Playgroud)

当我使用时super(DerivativeClass, self).__del__(),DerivativeClass.__del__()我收到以下错误:

Exception TypeError: 'must be type, not None' in <bound method 
DerivativeClass.__del__ of <__main__.DerivativeClass object at 0xb73a682c>> ignored
Run Code Online (Sandbox Code Playgroud)

题:

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

Hyp*_*eus 6

似乎这只发生在运行时退出(因为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
Run Code Online (Sandbox Code Playgroud)

这也很好:

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()
Run Code Online (Sandbox Code Playgroud)

这个:

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 ()
Run Code Online (Sandbox Code Playgroud)

在片段1和3中,我确保实例在课前死亡.在摘录2中,我以相当丑陋的方式围绕整个问题.

  • +1所有三个示例中的共同点是,它们避免使用在解释器退出时(可能)不再在范围内的全局名称. (2认同)