以pythonic方式使用类似java的导入

时间:2014-05-16 12:50:37

标签: python

我正在寻找一种处理以下包结构问题的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的导入是否可以接受?如果是这样 - 什么是首选方式?

1 个答案:

答案 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。在一个文件中定义多个类是完全正确的。