我正在阅读python项目的sourcode并遇到以下行:
from couchexport.export import Format
(来源:https://github.com/wbnigeria/couchexport/blob/master/couchexport/views.py#L1)
我转到couchexport/export.py
看看Format
是什么(Class?Dict?还有其他什么?)。不幸的是Format
不在该文件中。但是,export.py
会从couchexport.models中导入Format
,其中 一个Format
类(来源:https://github.com/wbnigeria/couchexport/blob/master/couchexport/models.py#L11)。
当我在IDE中打开原始文件并让它查找声明时,在本问题开头提到的行中,它直接导致models.py。
发生了什么事?如何从一个文件(export.py
)导入实际上是从另一个文件(models.py
)导入而未明确说明?
答案 0 :(得分:17)
如果模块a
执行了from b import Foo
,则Foo
之后成为a
的成员,并且可以a.Foo
访问。现在只能使用from a 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
这至少有两个问题:
通常你只需将以下内容放在__init__.py
:
from a import A
from b import B
from c import C
现在,您将所有部分放在一个地方,并且只需一次导入即可访问所有类:
from foo import A,B,C