【发布时间】:2014-05-23 06:08:00
【问题描述】:
我不能从子类的析构函数中调用父类的析构函数。 请检查以下代码:
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对象无效。 -
在
super...前面放一个print(DerivativeClass),你就会看到发生了什么。 -
或者在代码的最后一行添加
del instance,以确保在类越过约旦之前丢弃实例。 -
您可能根本不需要使用
__del__。最好避免它,除非你知道你真的需要它。有关详细信息,请参阅this question 的好答案。
标签: python destructor super