5

假设我必须为我的公司编写几个中小型库。

以pythonic的方式,使用Java方法并在所有这些方法前面加上一个通用的高级包(ahem,module)是否有意义,例如实现以下结构:

mycompany.mylibrary1.moduleA
mycompany.mylibrary1.moduleB.moduleD
mycompany.mylibrary2.moduleC

还是简单地选择更好:

mylibrary1.moduleA
mylibrary1.moduleB.moduleD
mylibrary2.moduleC

我看到大多数时候都使用第二种方法,但我一直在寻找确认(或不确认)这是要走的路。

除了:_

Python 库的命名约定有点混乱,所以我们永远不会得到完全一致的 [...]

然后我们只得到模块和类命名指示,以及不鼓励相对导入的事实。

绝对导入是要走的路这一事实使决定如何组织库非常重要(我不是在这里讨论避免相对导入是好还是坏)。

我确实喜欢命名所有库的 Java 方法,但我的印象是它不是 pythonic ......建议的方法是什么?

PS。虽然通常“最佳实践”问题在 SO 上被认为是主观的,但在 Python 中,PEP 的存在使我认为它们非常客观!虽然答案可能是......组织你的图书馆没有最佳实践......

4

1 回答 1

5

python 导入和名称存在认知问题。由于有许多不同种类的一阶对象(原语、模块、类、函数、伪装成模块的类、伪装成对象的模块等等),人们倾向于使用点符号来表示一个实体具有“从外部来源到达”。因此

import foo.bar
e = foo.bar.make_entity()

感觉比

from foo.bar import make_entity
e = make_entity()

但是,这意味着您将经常需要输入您需要访问的任何内容的完整路径。“com.example.some.lib.module.frobncate() 很快就会让人厌烦。因此,礼貌的库为其访问提供了一个合理的短名称。

于 2012-05-04T11:48:31.850 回答