Python - UnboundLocalError:局部变量' obj'在分配之前引用

时间:2015-07-20 08:21:28

标签: python inheritance

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

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中,是否有一种替代方法可以通过其成员函数删除类的实例。 在此先感谢!

2 个答案:

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