两个模块:
#foo.py
def foo():
print("foo")
和
#bar.py
def bar():
print("bar")
我想导入两个模块并将它们放在同一个命名空间中,如下所示(不起作用):
import foo as a
import bar as a
a.foo() # Error :(
a.bar()
你怎么能让它发挥作用?
答案 0 :(得分:2)
您可以创建包含两者的新模块。但请注意,任何在两个模块中看起来具有相同名称的函数/类/任何内容都只能被定义为最后导入的模块中的函数/类:
<强> merger.py 强>
from foo import *
from bar import *
<强> your_code.py 强>
import merger as a
a.foo()
a.bar()
更不用说在第一时间跟踪a.foobaz()
调用的位置有困难。
答案 1 :(得分:1)
import foo as a
import bar
# alias everything, you can use `bar.__all__` to automate this
a.bar = bar.bar
a.foo()
a.bar()
但是,我建议不要这样做,因为它会给你代码的未来维护者带来麻烦。
答案 2 :(得分:1)
在第一次导入时,您将foo指定为“a”,就像值一样。 在第二次导入中,您使用bar覆盖它。这就是错误的原因。
来到您的问题 - 您不能为单个变量分配多个值,除非它是dict,list,tuple等。
当您覆盖变量时,为其指定一个新值而不是同时保留它们。这就是您的进口产品。