我正在努力更好地了解Pythons模块,主要来自C背景。
我的main.py包含以下内容:
def g():
print obj # Need access to the object below
if __name__ == "__main__":
obj = {}
import child
child.f()
和child.py一起:
def f():
import main
main.g()
这个特殊的代码结构起初可能看起来很奇怪,但请放心,这是从我正在处理的一个更大的项目中剥离出来的,其中责任和解耦的强制推动了你看到的模块间函数调用序列的类型。
我需要能够在首次执行main python main.py
时访问我创建的实际对象。如果没有明确地将obj
作为参数发送,这是否可行?因为我会有其他变量,我也不想发送这些变量。如果绝望,我可以创建一个"状态"我需要访问的整个主模块的对象,并发送 it ,但即便如此,对我来说也是最后的选择。这是C中最简单的全局变量,但是在Python中我认为这是一个不同的野兽(只是模块全局变量?)
答案 0 :(得分:0)
其中一个解决方案,至少不包括参数传递,已经转向围绕这样一个事实:当执行主要的Python模块main
时 - 通过f.e. python main.py
其中if
子句成功,随后obj
被绑定 - 主模块及其状态存在并被引用为__main__
(使用sys.modules
字典检查) 。因此,当子模块需要主模块的实际实例时,它不需要main
导入__main__
,否则将存在两个不同的副本,具有各自不同的状态。
'固定' child.py:
def f():
import __main__
__main__.g()