2010-04-09 68 views
3

我想用一个模块作为其他模块中引用的单例。它看起来是这样的(实际上并不是我工作的一个代码,但我简化它扔掉所有东西无关):如何找出变量是否在Python中声明?

main.py

import singleton 
import printer 

def main(): 
    singleton.Init(1,2) 
    printer.Print() 

if __name__ == '__main__': 
    pass 

singleton.py

variable1 = '' 
variable2 = '' 

def Init(var1, var2) 
    variable1 = var1 
    variable2 = var2 

printer.py

import singleton 

def Print() 
    print singleton.variable1 
    print singleton.variable2 

我期望得到输出1/2,而是得到空的空间。我知道,在我将单例导入到print.py模块后,变量再次被初始化。

所以我认为,我必须检查,如果他们在singleton.py前intialized:

if not (variable1): 
    variable1 = '' 
if not (variable2) 
    variable2 = '' 

但我不知道该怎么做。或者有更好的方式来使用python中的单身模块,我不知道:)

回答

7

Init内的分配强制变量被视为本地。使用global关键字来解决这个问题:

variable1 = '' 
variable2 = '' 

def Init(var1, var2) 
    global variable1, variable2 
    variable1 = var1 
    variable2 = var2 
+0

非常感谢!那正是我所期待的。 – 2010-04-09 11:55:44

2

您可以使用德词典瓦尔全局

vars().has_key('variable1') 

globals().has_key('variable1') 

编辑:

也...

'variable1' in vars() 

例如

if not 'variable1' in vars(): 
    variable1 = ''