如何使用相同的名称导入两个模块?

时间:2015-09-25 09:17:20

标签: python python-3.x python-import

两个模块:

#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()

你怎么能让它发挥作用?

3 个答案:

答案 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等。

当您覆盖变量时,为其指定一个新值而不是同时保留它们。这就是您的进口产品。