我无法在子类的析构函数中调用父类的析构函数。请查看以下代码:
当我在
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
,而在子类的构造函数中却完全没有问题?
super(DerivativeClass, self)
返回一个类型为super
的对象,而不是BaseClass
的实例。__del__
可能对其第一个参数做出了一些假设,这些假设对于super
对象无效。 - chepnersuper...
前面加上print(DerivativeClass)
,你就会看到发生了什么。 - Hyperboreusdel instance
作为最后一行,以确保在类过度时实例被丢弃。 - Hyperboreus__del__
。除非你确定真的需要它,否则最好避免使用它。有关详细信息,请参见此问题中的好答案。 - shx2