我想将模块用作其他模块中引用的单例。它看起来像这样(这实际上不是我正在处理的代码,但我简化它以丢弃所有不相关的东西):
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,而是获得空的空间。据我所知,在将singleton导入print.py模块后,变量再次被初始化。
所以我认为我必须在singleton.py之前检查它们是否已经初始化了:
if not (variable1):
variable1 = ''
if not (variable2)
variable2 = ''
但我不知道该怎么做。或者有更好的方法在python中使用我不知道的单例模块:)
答案 0 :(得分:7)
Init
内的分配强制将变量视为本地变量。使用global
关键字来解决此问题:
variable1 = ''
variable2 = ''
def Init(var1, var2)
global variable1, variable2
variable1 = var1
variable2 = var2
答案 1 :(得分:2)
您可以使用de dictionaries vars 和 globals :
vars().has_key('variable1')
或
globals().has_key('variable1')
修改强>
也...
'variable1' in vars()
e.g。
if not 'variable1' in vars():
variable1 = ''