我正在编写代码生成器并希望能够导出到不同的文件类型。该foo
模块包含不同类(subA、subA、subC)的片段。bar.py
并baz.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
这让我可以导入foo
,foo.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] 删除。
我来说两句