Python - UnboundLocalError:在赋值前引用'obj'局部变量



我必须定义一个类方法,删除该类的实例。代码框架如下:

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()

最新更新