11

我正在阅读 python 项目的源代码并遇到以下行:

from couchexport.export import Format

(来源:https ://github.com/wbnigeria/couchexport/blob/master/couchexport/views.py#L1 )

我过去couchexport/export.py看看是什么Format(Class?Dict?其他东西?)。不幸Format的是不在那个文件中。 但是确实从有类的couchexport.modelsexport.py导入 a (来源:https ://github.com/wbnigeria/couchexport/blob/master/couchexport/models.py#L11 )。FormatFormat

当我在我的 IDE 中打开原始文件并让它查找声明时,按照我在这个问题开头提到的行,它直接导致 models.py。

这是怎么回事?如果没有明确说明,从一个文件 ( ) 的导入如何export.py实际上是从另一个文件 ( ) 的导入?models.py

4

1 回答 1

19

如果 modulea做了 a from b import Foo,则 thenFooalater 的成员,并且可以作为a.Foo. 唯一的结果是您现在也可以使用from a import Foo.

如果您有一个分布在多个文件中的大型库,并且您希望它们可以从一个位置访问,这通常使用。假设您有一个foo具有以下布局的包:

foo/
    a.py
    b.py
    c.py
    __init__.py

a.py, b.py, c.py, 分别定义类A,BC

如果您想使用这些类,通常必须编写

from foo.a import A
from foo.b import B
from foo.c import C

这至少有两个问题:

  1. 这个简单的导入需要很多代码(三行)
  2. 库作者现在不能再更改文件/类关联,因为这会破坏现有代码。

因此,通常您只需将以下内容放入__init__.py

from a import A
from b import B
from c import C

现在你把所有的部分放在一个地方,所有的类都可以通过一次导入来访问:

from foo import A,B,C
于 2012-04-07T11:04:54.660 回答