Python:无法通过super()调用父类析构函数
我无法在子类的析构函数中调用父类的析构函数。请看下面的代码:
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
看起来这个问题只在程序运行结束时出现(因为 DerivativeClass
是 None
)。
这个代码运行得很好:
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中,我用一种比较笨的方法绕过了这个问题。