Python将源于一个模块的对象从另一个模块导入第三个模块

Python将源于一个模块的对象从另一个模块导入第三个模块,python,import,Python,Import,我正在阅读一个python项目的sourcode,遇到了以下几行代码: from couchexport.export import Format (来源:) 我转到couchexport/export.py查看格式是什么(Class?Dict?其他什么?)。不幸的是,格式不在该文件中export.py会从couchexport.models导入格式,其中有格式类(来源:) 当我在IDE中打开原始文件并让它查找声明时,正如我在本问题开始时提到的,它直接指向models.py 发生什么事了?如果

我正在阅读一个python项目的sourcode,遇到了以下几行代码:

from couchexport.export import Format
(来源:)

我转到
couchexport/export.py
查看
格式是什么(Class?Dict?其他什么?)。不幸的是,
格式
不在该文件中<但是,code>export.py
会从couchexport.models导入
格式
,其中有
格式
类(来源:)

当我在IDE中打开原始文件并让它查找声明时,正如我在本问题开始时提到的,它直接指向models.py


发生什么事了?如果模块
a
从b导入Foo,那么
Foo
a
之后的成员,并且可以作为
a.Foo
访问,那么从一个文件导入(
export.py
)怎么可能实际上是从另一个文件导入(
models.py
)。现在,您也可以使用import Foo中的
导入它,这是唯一的结果

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

foo/
    a.py
    b.py
    c.py
    __init__.py
a.py
b.py
c.py
,分别定义类
a
b
c

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

from foo.a import A
from foo.b import B
from foo.c import C
这至少有两个问题:

  • 这个简单的导入需要很多代码(三行)
  • 库作者现在不能再更改文件/类关联,因为这会破坏现有代码 因此,通常您只需将以下内容放入
    \uuuu init\uuuu.py

    from a import A
    from b import B
    from c import C
    
    现在,您将所有部分放在一个地方,所有类都可以通过一次导入访问:

    from foo import A,B,C
    

    我不确定问题1在说什么。我认为这可能是一个未翻译的习语,但由于
    type
    在Python中也有某种含义,我不确定。:^)谢谢你的回复。这是一个很好的解释!