关于Python全局变量

时间:2014-08-16 02:54:50

标签: python global-variables

    import sys
    from threading import Thread

    is_online=1

    class CommandListenerThread(Thread):
        global is_online
        def run(self):
          while is_online:
             next_command=sys.stdin.readlines();
             if next_command == 'exit':
                 is_online=0
             else:
                 print next_command



    listener=CommandListenerThread()
    listener.start()

当我运行此python代码时,它显示错误:“UnboundLocalError:在分配之前引用的局部变量'is_online'

我测试了另一个代码,它使用相同的方式访问类中的全局变量,并且它工作正常。那么,这个特定的代码出了什么问题?

使用线程监听命令行的代码可能看起来很奇怪,但它只是 我的程序的一部分,当我运行整个程序时会出错。

谢谢你们

1 个答案:

答案 0 :(得分:2)

global is_online移至run()以解决错误。

要解决您的其他问题(在下面的评论中),为什么不将它变为静态类变量?

class CommandListenerThread(Thread):    
    is_online = 1    
    def run(self):
        print CommandListenerThread.is_online

如果您必须使用具有全局is_online的其他代码,您可以按如下方式采用DI(依赖注入)方法:

导入系统 来自线程导入线程

is_online = 2

class CommandListenerThread(Thread):

    def __init__(self, is_online):
        super(CommandListenerThread, self).__init__()       
        CommandListenerThread.is_online = is_online # now it's a static member
                                                    # if you want to make it an instance member use self.is_online

    def run(self):
        print CommandListenerThread.is_online        

listener=CommandListenerThread(is_online) # inject the value to the constructor 
listener.start()