如何轻松导入不同文件中的多个对象
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
。模块存在的原因是为了放松代码块之间的依赖关系,并允许在不导入更多代码的情况下使用一些代码。如果某些代码必须始终在一起,请将其放在同一个模块中。
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
。模块存在的原因是为了放松代码块之间的依赖关系,并允许在不导入更多代码的情况下使用一些代码。如果某些代码必须始终在一起,请将其放在同一个模块中。