如何重新组织 python 模块以不反映目录结构?

菲利普

我正在编写代码生成器并希望能够导出到不同的文件类型。foo模块包含不同类(subA、subA、subC)的片段。bar.pybaz.py保存不同语言的片段。
我发现导入foo.bar和获取bar语言的所有片段比必须bar为每个类导入方便得多
同样,我宁愿将特定类的所有片段都放在同一目录中,因此组织如下

foo
| __init__.py
+ subA
| | __init__.py
| | bar.py
| ` baz.py
+ subB
| | __init__.py
| | bar.py
| ` baz.py
` subC
  | __init__.py
  | bar.py
  ` baz.py

我希望能够像这样导入:from foo.bar import subA应该让我访问foo/subA/bar.py

我想我需要重新组织,foo/__init__.py但我不知道到底要做什么。我的猜测是我需要创建一个空模块或命名空间,或者甚至只是用所需模块填充的对象。
但我不断收到语法错误。

目前我foo/__init__.py看起来像这样

import foo.subA.bar
import foo.subB.bar
import foo.subC.bar

class bar:
    def __init__(self):
        self.subA = foo.subA.bar
        self.subB = foo.subB.bar
        self.subC = foo.subC.bar

这让我可以导入foofoo.bar但尝试访问foo.bar.subA却给了我

AttributeError: type object 'bar' has no attribute 'subA'

我不确定我在这里遗漏了什么,所以我愿意接受建议。

菲利普

通过引入处理别名的包,我能够让它足够方便地工作,如下所示:

foo
| __init__.py
+ subA
| | __init__.py
| | bar.py
| ` baz.py
+ subB
| | __init__.py
| | bar.py
| ` baz.py
+ subC
| | __init__.py
| | bar.py
| ` baz.py
| bar.py
` baz.py

bar.py 看起来像这样:

import foo.subA.bar as subA
import foo.subB.bar as subB
import foo.subC.bar as subC

这使我能够import foo.bar并获得foo.bar.subA指向foo/subA/bar.py.

这并不是我的想法,因为它要求我在 中维护一个别名列表bar.py,我可以不用它,但它会做到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章