将变量名称导入类名称空间

时间:2018-01-24 08:23:03

标签: python

是否可以将全局变量导入对象的实例名称空间?

在这样的结构中:

./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”?

1 个答案:

答案 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>