Python导入所有导入另一个相同模块的模块

时间:2010-08-11 09:06:04

标签: 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而不直接导入它?

2 个答案:

答案 0 :(得分:7)

这是完全有效的;导入模块时,Python会将其添加到sys.modulesimport语句首先检查此字典(这很快,因为字典查找速度很快),以查看模块是否已经导入。因此,在这种情况下,bar1会导入bar3并将其添加到sys.modules。然后bar2将使用已导入的bar3

您可以通过以下方式验证:

import sys
print( sys.modules )

请注意,from src import *是错误的代码,您不应该使用它。 import srcsrc.specialSandwichMaker引用,或from src import specialSandwichMaker。这是因为模块不应该污染彼此的命名空间 - 如果你from src import *src中定义的所有全局变量也会出现在你的命名空间中。这很糟糕。

答案 1 :(得分:1)