Python导入模块全部导入另一个相同的模块

标签 python

我想要的是,我有 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.modulesimport 语句首先检查这个字典(这很快,因为字典查找很快)以查看模块是否已经被导入。所以在这种情况下,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/

相关文章:

python - 如何忽略使用自签名证书使用 pip install 到私有(private) pypi 服务器时引发的安全警告

python - 如何按一列对整个 pandas 数据框进行排序,移动以 3 秒分组的行

python、pandas、sqlalchemy - 在查询中转义的符号

python - Celery 任务子进程填满并发槽?

python - 我怎样才能有效地进行这个 numpy 数组操作?

python - 写入 CSV 文件时出现 Unicode 问题

Python请求填写下拉菜单的表单

python - 导入 numpy 给出 ImportError : cannot import name TestCase

python - 比 <__main__.MyClass instance at 0x1624710> 更漂亮的东西

python - 使用 eval() 函数,如何评估 python 中观察到的代码的表达式