我想将来自不同包的已知模块列表(bar
,baz
,qux
)合并到一个模块中,我的应用程序可以将其作为外观访问( foo
)。
我还希望bar
,baz
和qux
能够控制“导出”的内容,而foo
则不知道内容这些模块只会“重新导出”它们。
例如:
foo.py
的全部内容from somepackage.bar import *
from otherpackage.baz import *
from yetanotherpackage.qux import *
bar,baz和qux的部分内容:
bar.py:
def bar1():
print "bar1"
__all__ = ["bar1"]
baz.py:
def baz1():
print "baz1"
def baz2():
print "baz1"
__all__ = ["baz1", "baz2"]
qux.py:
def qux1():
print "qux1"
__all__ = ["qux1"]
现在,当我在我的应用程序中导入foo时,我将可以访问foo.bar1
,foo.baz1
,foo.baz2
和foo.qux1
。这就是我想要的。
但是,使用import *
会产生一种耻辱感,这让我觉得我有可能忽略这样做的一些陷阱。
我的榜样是否超越了实现上述两个目标的惯用方法?或者有更好的方法吗?
答案 0 :(得分:3)
在我看来,这几乎是import *
唯一合理的用例。我觉得你做的方式很好。如果您没有在其他模块中定义__all__
,那么我仍然建议您明确地从每个模块中导入所需的名称。