Python的导入对象的一个模块中的源于不同的模块到第三模块
问题描述:
我正在读sourcode为Python项目和整个下面的行来了:Python的导入对象的一个模块中的源于不同的模块到第三模块
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
,其中是 a Format
类(来源:https://github.com/wbnigeria/couchexport/blob/master/couchexport/models.py#L11)。
当我在我的IDE中打开原始文件并让它查找声明时,我在本问题开始时提到了它,它直接导致了models.py。
发生了什么事?如何从一个文件导入(export.py
)实际上是从另一个文件导入(models.py
)而未明确说明?
答
如果模块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
我不确定#1说什么问题。 – DSM 2012-04-07 11:15:56
@DSM:澄清:) – 2012-04-07 11:26:54
我认为这可能是一个未翻译的习惯用语,但由于'type'意味着Python中的某些东西,所以我不确定。 :^) – DSM 2012-04-07 11:30:17