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

Python 如何使用相同的名称导入两个模块?,python,python-3.x,python-import,Python,Python 3.x,Python Import,两个模块: #foo.py def foo(): print("foo") 及 我想导入这两个模块并将它们放在同一个名称空间中,如下所示(这不起作用): 你怎样才能让它工作 import foo as a import bar # alias everything, you can use `bar.__all__` to automate this a.bar = bar.bar a.foo() a.bar() 但是,我建议不要这样做,因为这会给以后的代码维护人员带来麻烦。在第

两个模块:

#foo.py
def foo():
    print("foo")

我想导入这两个模块并将它们放在同一个名称空间中,如下所示(这不起作用):

你怎样才能让它工作

import foo as a
import bar

# alias everything, you can use `bar.__all__` to automate this
a.bar = bar.bar

a.foo()
a.bar()

但是,我建议不要这样做,因为这会给以后的代码维护人员带来麻烦。

在第一次导入中,您将foo赋值为“a”,就像赋值一样。 在第二次导入中,使用bar覆盖它。这就是错误的原因

说到你的问题——你不能给一个变量分配多个值,除非它是一个dict、list、tuple等等


重写变量时,为其指定一个新值,而不是同时保留这两个值。这就是您的导入所发生的情况。

您可以创建一个包含这两者的新模块。但是,请注意,在两个模块中似乎具有相同名称的任何函数/类/任何内容将仅定义为来自上一个导入模块的函数/类/任何内容:

合并.py

from foo import *
from bar import *
import merger as a

a.foo()
a.bar()
您的_代码.py

from foo import *
from bar import *
import merger as a

a.foo()
a.bar()

更不用说追踪
a.foobaz()
调用最初定义在哪里的困难了。

为什么不能将foo作为a导入,将bar作为b导入?因为如果两者的名称相同,效果会更好。例如:
import tkinter as tk
import bwidget as tk
为什么它工作得更好?如果两个模块都有一个同名函数该怎么办?这是一个可怕的想法将2个(或更多)任意第三方模块组合到一个命名空间中会导致灾难,原因已经提到过了。但是,在某些情况下,这是有意义的:当您创建了一个由多个源文件中定义的组件组成的包,并且希望在一个名称空间中导入所有这些组件时。当然,你还是要小心,不要意外地造成名称冲突。谢谢你的回答,这只是我的一个想法,我想这会让事情变得更简单。