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
    将不知道这些模块的内容,只需“重新导出”它们

  • 例如:

    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*
    会带来一种耻辱感,这让我觉得这样做可能会忽略一些陷阱


    我上面的例子是实现上述两个目标的惯用方法吗?还是有更好的方法?

    在我看来,这几乎是导入*的唯一合理用例。我认为你这样做很好。如果在其他模块中没有定义
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    ,那么我仍然建议从每个模块中明确导入所需的名称