Python中的模块究竟是如何工作的?

时间:2014-07-17 09:47:06

标签: python module

我正在努力更好地了解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中我认为这是一个不同的野兽(只是模块全局变量?)

1 个答案:

答案 0 :(得分:0)

其中一个解决方案,至少不包括参数传递,已经转向围绕这样一个事实:当执行主要的Python模块main时 - 通过f.e. python main.py其中if子句成功,随后obj被绑定 - 主模块及其状态存在并被引用为__main__(使用sys.modules字典检查) 。因此,当子模块需要主模块的实际实例时,它不需要main导入__main__,否则将存在两个不同的副本,具有各自不同的状态。

'固定' child.py:

def f():

    import __main__

    __main__.g()