我正在寻找一种处理以下包结构问题的pythonic方法。
在我的项目中,我实现了几个文件解析器。这是我对包装结构的第一个想法:
myproject
└── parsers
├── __init__.py
├── parser_a.py
└── parser_b.py
这种方法的缺点是所需的导入相当冗长:
from myproject.parser.parser_a import Parser_A
from myproject.parser.parser_b import Parser_B
我认为这种导入会更好:
from myproject.parser import Parser_A
from myproject.parser import Parser_B
至少有两种方法可以实现这一目标:
i)将所有解析器放在一个巨大的python模块中。
myproject
└── parser.py
但这会导致一个巨大的,可能令人困惑的 parser.py 文件
ii)将 parser.py 模块拆分为多个文件[1]
myproject
├── parser.py
└── parsers
├── __init__.py
├── parser_a.py
└── parser_b.py
parser.py 的内容:
from parsers.parser_a import ParserA
from parsers.parser_b import ParserB
这种方法避免了单文件问题,但是它看起来有点像hacky。
这可能是一个意见问题,但我正在寻找一种处理这类问题的pythonic方法。使用那些缩短的类似Java的导入是否可以接受?如果是这样 - 什么是首选方式?
答案 0 :(得分:5)
就个人而言,我会将所有内容都放在parser.py
中另一个常见的选择是采用这种布局:
myproject
└── parsers
├── __init__.py
├── parser_a.py
└── parser_b.py
并在__init__.py
中包含以下内容:
from parsers.parser_a import ParserA
from parsers.parser_b import ParserB
对此没有一个特定的规则,因此由您自己决定使用。
请记住,python不是java。在一个文件中定义多个类是完全正确的。