我必须定义一个类方法,删除该类的实例。代码的骨架如下所示:
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:\Python27\inheritance_del_instance.py", line 23, in <module>
obj.exitfun()
File "C:\Python27\inheritance_del_instance.py", line 19, in exitfun
del obj
UnboundLocalError: local variable 'obj' referenced before assignment
除了打电话,
del <object>
在Main中,是否有一种替代方法可以通过其成员函数删除类的实例。
在此先感谢!
答案 0 :(得分:3)
Python有一个垃圾收集器,因此当没有更多引用指向它时,会从内存中删除一个对象。
关键字del
只是删除变量名和对象之间的绑定(引用)。如果没有对该对象的引用,则其内存将被垃圾收集器释放。
使用del
删除对象内的对象是没有意义的,因为del
本身不会触发任何删除。
此外,在您的代码中,您有语法错误,实际上未定义变量obj
。您应该使用self
从中引用对象本身。
答案 1 :(得分:1)
使用关键字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()