我似乎无法做到这一点。
我有2个python文件,比如a.py和b.py
a.py中的是:
def foo():
global name
name = "foo"
import b
b.bar()
if __name__ == "__main__":
foo()
b.py中的:
import a
def bar():
name = a.name
print(name)
我对此代码有三个不同的问题:
AttributeError: 'module' object has no attribute 'name'
我肯定知道b.py无法访问b.py中函数中定义的变量,但我该如何解决这个问题呢?name = a.foo.name
而不是name = a.name
,但这也没有做到这一点并给了我:AttributeError: 'function' object has no attribute 'name'
,
这在任何情况下都是可行的,我做错了什么?感谢您花时间和对不起,如果这对您们中的某些人来说显而易见,我仍然会深入研究。
答案 0 :(得分:0)
脚本不是模块。这是一个令人头疼的问题但是当你运行python3 a.py
时,a.py
不是一个模块(或者更确切地说,它是一个名为__main__
的模块),它将在你导入时重新加载。
假设我有 c.py
print('hello')
if __name__=="__main__":
import c
当我运行它时,我得到了
hello
hello
使用您的示例进行说明,如果我将 b.py 更改为
import __main__
def bar():
name = __main__.name
print(name)
有效。但只有一点,因为如果某人导入a
你仍然有两个模块和两个变量副本。
如果您需要共享数据,则必须使用导入的模块,而不是顶级脚本。当我想要共享数据时,我创建了一个单独的模块,它不会导入任何东西(或只导入标准库),它是空的或者我想要共享的变量有默认值。