是否可以将全局变量导入对象的实例名称空间?
在这样的结构中:
./mypackage/module1.py
./config.py
./script1.py
如果config.py有:
#config
MYSETTING=1
和script1.py有:
#SCRIPT1
from config import *
from mypackage.mymodule import MyClass as MC
obj=MC()
module1.py:
#Myclass
class MyClass(object):
def test(self):
print MYSETTING
会给出错误NameError: global name "MYSETTING" is not defined
有没有什么方法可以将变量从config.py导入MyClass名称空间作为全局变量而不在每个变量上进行枚举“global x”?
答案 0 :(得分:0)
这个问题有点令人困惑。有三个部分。
config
:包含您想要的变量。
script
:包含从config
导入的逻辑代码和变量。
module
:包含函数'定义
当您致电MC.test
时,它会在MYSETTING
的命名空间中找到module
,但您想要的是script
'命名空间。所以在test
函数中,你真正想要的是访问父框架的全局命名空间。
在这种情况下,您需要使用inspect
内置模块。
import inspect
print(inspect.current_frame().f_back.f_globals["MYSETTING"])
inspect.current_frame()
将返回当前帧,f_back
引用父帧,即调用此函数的帧,然后f_globals
引用帧globals()
< / p>