python:我需要更好地理解导入和包

2024-04-27 04:17:04 发布

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

我的应用程序的结构与此类似:

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进行通信的 我开始认为我还没有完全理解软件包之间的导入是如何工作的,我做错了什么?你知道吗

谢谢你!你知道吗


Tags: pyimportnonefooinitmaindefbar
1条回答
网友
1楼 · 发布于 2024-04-27 04:17:04

我花了一段时间阅读了所有代码,但看起来您的问题出在pkg2/mod2.py中。第foo = basemod.get_msg()行在第一次导入文件时执行,以后不再执行。所以当您更改mod1.bar的值时,它已经执行了,并且fooNone。你知道吗

解决方案应该是简单地将该行移到print_foo函数中,因此它只在调用该函数时执行—即在设置相关值的代码之后。你知道吗

相关问题 更多 >