我的应用程序的结构与此类似:
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
{br}这两个包的sort是完全独立的,每个都是通过cd2进行通信的 我开始认为我还没有完全理解软件包之间的导入是如何工作的,我做错了什么?你知道吗
谢谢你!你知道吗
我花了一段时间阅读了所有代码,但看起来您的问题出在pkg2/mod2.py中。第
foo = basemod.get_msg()
行在第一次导入文件时执行,以后不再执行。所以当您更改mod1.bar
的值时,它已经执行了,并且foo
是None
。你知道吗解决方案应该是简单地将该行移到
print_foo
函数中,因此它只在调用该函数时执行—即在设置相关值的代码之后。你知道吗相关问题 更多 >
编程相关推荐