将变量名导入类namesp

2024-04-25 21:59:04 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以将全局变量导入对象的实例命名空间?你知道吗

在这样的结构中:

./mypackage/module1.py
./config.py
./script1.py

如果配置.py有:

#config
MYSETTING=1

script1.py有:

#SCRIPT1
from config import *
from mypackage.mymodule import MyClass as MC

obj=MC()

模块1.py:

#Myclass
class MyClass(object):
    def test(self):
        print MYSETTING

将产生错误NameError: global name "MYSETTING" is not defined

有什么方法可以从中导入变量吗配置.py作为globals进入MyClass名称空间,而不在每个名称空间上执行枚举的“global x”?你知道吗


Tags: 对象实例frompyimport名称configmyclass
1条回答
网友
1楼 · 发布于 2024-04-25 21:59:04

这个问题有点令人困惑。有三个部分。你知道吗

config:包含所需的变量。你知道吗

script:包含从config导入的逻辑代码和变量。你知道吗

module:包含函数的定义。你知道吗

当您调用MC.test时,它将在module的命名空间中找到MYSETTING,但您想要的是在script的命名空间中找到。所以在test函数中,您真正想要的是访问父帧的全局命名空间。你知道吗

在这种情况下,您需要使用inspect内置模块。你知道吗

import inspect

print(inspect.current_frame().f_back.f_globals["MYSETTING"])

inspect.current_frame()将返回当前帧,f_back表示调用此函数的父帧,然后f_globals表示帧的globals()

相关问题 更多 >