假设有两个标题为GlobVars
和MyModule
的Python模块。
模块GlobVars
旨在为其他模块提供全局变量my_glob_var
。
# cat GlobVars.py
class getGlobVars:
def __init__(self):
global my_glob_var
my_glob_var = 'World'
def go(self):
pass
模块MyModule
包含一个包含两个函数(_concat
和getConcat
)的类,其中一个(即_concat
)是一种尝试访问上述内容的静态方法全局变量。函数getConcat
访问static方法,并且应该返回一个连接的字符串。
# cat MyModule.py
import GlobVars as GV
class MyClass:
def __init__(self, var1):
self.var1 = var1
@staticmethod
def _concat(var2):
GV.getGlobVars().go()
return var2 + my_glob_var
def getConcat(self):
return MyClass._concat('Hello ')+self.var1
当我尝试加载两个模块并执行函数getConcat
时,似乎没有正确访问全局变量。为什么这样,解决方案是什么?
import MyModule
import GlobVars
print MyModule.MyClass('!').getConcat()
# NameError: global name 'my_glob_var' is not defined
答案 0 :(得分:1)
在您的特定情况下,您不必使用global
关键字,也不必使用GlobVars
类。
相反:
# cat GlobVars.py
my_glob_var = 'World'
# cat MyModule.py
import GlobVars as GV
class MyClass:
def __init__(self, var1):
self.var1 = var1
@staticmethod
def _concat(var2):
return var2 + GV.my_glob_var
def getConcat(self):
return MyClass._concat('Hello ')+self.var1
顺便说一句,python docs几乎没有关于跨模块共享全局变量的部分:https://docs.python.org/3/faq/programming.html?highlight=global#how-do-i-share-global-variables-across-modules