【发布时间】:2011-08-12 14:18:22
【问题描述】:
我的应用程序的结构与此类似:
myapp.py
basemod.py
[pkg1]
__init__.py
mod1.py
[pkg2]
__init__.py
mod2.py
myapp.py:
import pkg1
import pkg2
if __name__ == '__main__':
pkg1.main()
pkg2.main()
basemod.py:
import pkg1
def get_msg():
return pkg1.msg
pkg1/__init__.py:
import mod1
msg = None
def main():
global msg
mod1.set_bar()
msg = mod1.bar
pkg1/mod1.py:
bar = None
def set_bar():
global bar
bar = 'Hello World'
pkg2/__init__.py:
import mod2
def main():
mod2.print_foo()
pkg2/mod2.py:
import basemod
foo = basemod.get_msg()
def print_foo():
print(foo)
如果我运行myapp.py,我会得到:
None
在我看来,我希望:
Hello World
我的目标是让两个包完全独立,并且只通过basemod.py 进行通信,这是pkg1 的一种API。
我开始认为我还没有完全理解包之间的导入是如何工作的,我做错了什么?
谢谢!
【问题讨论】:
-
这听起来像是
import pdb,pdb.set_trace()的工作 -
很好,我会调查一下,谢谢。
-
python 中的模块在某种程度上类似于单例。在你的
pkg1.main()行之后,但在你的pkg2.main()行之前,你将拥有pkg1.msg == pkg1.mod1.bar == 'Hello World',但仍然是pkg2.mod2.foo is None(在导入时分配)