公开一些Python类而不耦合到文件结构

公开一些Python类而不耦合到文件结构,python,python-2.7,Python,Python 2.7,我的项目由几个Python类组成,分为几个文件 projname/ a.py # Has classes A1 and A2 b.py # Has classes B1 B2 B3 c.py # Has class C test/ doc/ bin/ 我希望能够将这些类中的一些(或全部)公开,这样,无论是从我的bindir,还是从另一个Python脚本,我都可以执行以下操作: import projname ... myvar = projname.A1() 我不知道

我的项目由几个Python类组成,分为几个文件

projname/
    a.py # Has classes A1 and A2
    b.py # Has classes B1 B2 B3
    c.py # Has class C
test/
doc/
bin/
我希望能够将这些类中的一些(或全部)公开,这样,无论是从我的
bin
dir,还是从另一个Python脚本,我都可以执行以下操作:

import projname
...
myvar = projname.A1()
我不知道该怎么做。到目前为止,我能做的最好的事情是:

import projname.a
import projname.b
import projname.c

myvar = projname.a.A1()
我不喜欢这样有两个原因:

  • 我不希望我的代码的客户必须知道并关心我用来分发类的文件。如果我更改文件,我不想破坏客户端
  • 我更愿意只向项目外部公开某些类,而不是所有类

  • 将一个
    \uuuu init\uuuu.py
    放入
    projname/
    中,内容如下:

    from .a import A1, A2
    from .b import B1, B2, B3
    from .c import C
    

    这会将
    projname
    转换为一个包,其命名空间包含
    \uuu init\uuuuuuuupy
    包含的任何内容,在本例中是
    A1
    A2
    B1
    B2
    B3
    C

    超级!谢谢我很难理解导入和细微差异的所有组合。你能推荐一个清晰的文档或教程吗?