如何轻松导入不同文件中的多个对象

How to import multiple objects in different files easily

application
├── folder
│       └── A.py --> class A:...
│       └── B.py --> class B:...  
│       └── C.py --> class C:...
└── __init.py__

让 类 A、B 和 C 进入 __init__.py 的最佳方法是什么? 下面是一种方法

from .folder.A import A
from .folder.B import B
from .folder.C import C

但是我可以使用一种更简单的衬垫吗?像 from .folder.* import A,B,C

你写的就可以了,除非你想写一个循环,否则没有多模块导入单行:

import importlib
for sub in "A B C".split():
    globals()[sub] = getattr(importlib.import_module(".folder." + sub), sub)

我写以上只是为了说明这有多难看。

稍微好一点的方法是在folder.__init__

中进行
# folder.__init__
from A import *
from B import *
from C import *

# __init__
from .folder import *

为了保留对此的一些控制并防止出现意外,请在各个模块中定义 __all__ 以限制被拉到顶部的内容:

# folder.A
__all__ = ["A"]

# folder.B
__all__ = ["B"]

# etc.

现在,我在这里真正推荐的是:在找到原因之前不要将事情分解成模块。如果 A/B/C 之间存在如此紧密的依赖关系,以至于它们最终总是一起导入——你的问题就是这种情况——将它们全部放入 folder.py 模块(甚至不是单独的目录),只需在 __init__ 中执行 from .folder import A, B, C。模块存在的原因是为了放松代码块之间的依赖关系,并允许在不导入更多代码的情况下使用一些代码。如果某些代码必须始终在一起,请将其放在同一个模块中。