gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:20:14 24 4
gpt4 key购买 nike

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

from couchexport.export import Format

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

我转到 couchexport/export.py 以查看 Format 是什么(类?字典?其他东西?)。不幸的是 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) 导入,而没有明确说明?

最佳答案

如果模块 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, 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

关于Python将源自一个模块的对象从另一个模块导入第三个模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10053886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com