我想要的是,我有 foo.py,它从 bar1、bar2 导入类,它们都需要 bar3,例如
foo.py
from src import *
...
src/__init__.py
from bar1 import specialSandwichMaker
from bar2 import specialMuffinMaker
src/bar1.py
import bar3
class specialSandwichMaker(bar3.sandwichMaker)
...
src/bar2.py
import bar3
class specialMuffinMaker(bar3.muffinMaker)
...
有没有更有效的方法让 bar1 和 bar2 文件可以使用 bar3 而无需直接导入它们?
最佳答案
这是完全有效的;导入模块时,Python 会将其添加到 sys.modules
。 import
语句首先检查这个字典(这很快,因为字典查找很快)以查看模块是否已经被导入。所以在这种情况下,bar1
将导入 bar3
并将其添加到 sys.modules
。然后 bar2
将使用已经导入的 bar3
。
您可以通过以下方式验证这一点:
import sys
print( sys.modules )
请注意,from src import *
是错误的代码,您不应该使用它。 import src
并使用 src.specialSandwichMaker
引用,或 from src import specialSandwichMaker
。这是因为模块不应该污染彼此的 namespace ——如果您执行 from src import *
,所有在 src
中定义的全局变量也会出现在您的 namespace 中。这很糟糕。
关于Python导入模块全部导入另一个相同的模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3456874/