Python 将模块聚合为单个“模块”的惯用方法;正面;模块
我想将来自不同软件包的已知模块列表(Python 将模块聚合为单个“模块”的惯用方法;正面;模块,python,Python,我想将来自不同软件包的已知模块列表(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
,baz
,qux
)组合到一个模块中,我的应用程序可以作为外观访问该模块(foo
)
bar
、baz
和qux
能够控制它“导出”的内容,而foo
将不知道这些模块的内容,只需“重新导出”它们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*
会带来一种耻辱感,这让我觉得这样做可能会忽略一些陷阱
我上面的例子是实现上述两个目标的惯用方法吗?还是有更好的方法?在我看来,这几乎是导入*的唯一合理用例。我认为你这样做很好。如果在其他模块中没有定义
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
,那么我仍然建议从每个模块中明确导入所需的名称