Python将来自不同模块的一个模块中的对象导入到第三个模块中

ade*_*ter 8 python import

我正在阅读python项目的sourcode,并遇到以下行:

from couchexport.export import Format
Run Code Online (Sandbox Code Playgroud)

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

我去couchexport/export.py看看是什么Format(Class?Dict?还有什么?).不幸的Format是不在那个文件中. export.py然而不导入Format从couchexport.models那里一个Format类(来源:https://github.com/wbnigeria/couchexport/blob/master/couchexport/models.py#L11).

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

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

Nik*_* B. 17

如果模块a执行a from b import Foo,则之后Foo是成员,a并且可以访问a.Foo.现在只能使用它来导入它from a import Foo.

如果您有一个跨多个文件分布的大型库,并且您希望可以从一个位置访问它们,则通常会使用此方法.假设您有一个包含foo以下布局的包:

foo/
    a.py
    b.py
    c.py
    __init__.py
Run Code Online (Sandbox Code Playgroud)

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

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

from foo.a import A
from foo.b import B
from foo.c import C
Run Code Online (Sandbox Code Playgroud)

这至少有两个问题:

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

所以通常你只需将以下内容放入__init__.py:

from a import A
from b import B
from c import C
Run Code Online (Sandbox Code Playgroud)

现在,您将所有部分放在一个位置,并且只需一次导入即可访问所有类:

from foo import A,B,C
Run Code Online (Sandbox Code Playgroud)