包模拟模块和实际模块之间的区别

时间:2013-11-29 14:30:44

标签: python module package

让我们假设我们编写了一些将被分发的组件。让我们称之为“工人”。工作者应该做一些魔术,但API非常简单 - 2或3个类/函数。但是工人的内心很大。我们需要非API函数。

最终用户应该像这样使用它:

from worker import foo
...
foo(x)

import worker
...
worker.foo(x)

但是foo使用“login”,它需要大量的位操作,散列,编码等,并且“计算”使用了大量的数学表达式。

所以,现在我们有2个代码组织选项:

  1. 只有一个名为“worker”的模块具有API函数(“foo”),内部函数(“login”,“calculate”)和__all__变量值["foo", ...]

  2. 我们创建包“worker”,并将逻辑拆分为子模块:

    worker
    worker/__init__.py
    worker/api.py
    worker/login_related.py
    worker/calculate_related.py
    

    并在__init__.py中提出:

    from worker.api import *
    
  3. 现在用户不应该知道“worker”是模块还是包。

    但他呢?

    我知道,worker.__file__将在最后返回__init__.py的路径。此外,API函数的限定名称将指向模块,而不是包(除非我在__init__.py中定义它们)。还有什么其他差异?如何区分“蒙面包”和模块?

0 个答案:

没有答案