我必须定义一个类方法,删除该类的实例。代码框架如下:
class baseClass(object):
def __init__(self):
pass
def fun(self):
print 'Base Class'
class derivedClass(baseClass):
def __init__(self):
super(derivedClass, self).__init__()
def fun(self):
print 'Derived class'
def exitfun(self):
print 'Delete Object Instance'
del obj
obj = derivedClass()
obj.fun()
obj.exitfun()
我得到以下错误:
Traceback (most recent call last):
File "C:Python27inheritance_del_instance.py", line 23, in <module>
obj.exitfun()
File "C:Python27inheritance_del_instance.py", line 19, in exitfun
del obj
UnboundLocalError: local variable 'obj' referenced before assignment
除了调用,
del <object>
在Main中的中,是否存在通过其成员函数删除类实例的替代方法。提前感谢!
Python有一个垃圾收集器,所以当一个对象没有更多的引用指向它时,它就会从内存中删除。关键字del
只是移除变量名和对象之间的绑定(引用)。如果不再有对该对象的引用,则垃圾收集器将释放该对象的内存。使用del
来删除对象内部的对象是没有意义的,因为del
本身不会触发任何删除。
此外,在您的代码中,您有一个语法错误,事实上,变量obj
没有定义。您应该使用self
从对象内部引用对象本身。
使用关键字global
将解决您的问题:
def exitfun(self):
global obj
del obj
然而,这可能不是你想要做的。为了定义一个类方法,您需要classmethod装饰器。此外,您可以在类级别保存实例,这样您就不必通过globals
:
class Test(object):
def __init__(self):
type(self).instance = self
def say_hello(self):
print 'Hello!'
@classmethod
def remove_instance(cls):
del cls.instance
Test()
Test.instance.say_hello()
Test.remove_instance()