我找到了this,但这不是我想做的事。
我想导入目录中所有文件中的所有类。基本上,我想替换它:
from A import *
from B import *
from C import *
使用动态内容,以便每次添加其他文件时都不会继续编辑__init__.py
。
glob
解决方案似乎相当于
import A
import B
import C
完全不一样。
答案 0 :(得分:6)
你可以这样做,但请记住isinstance(cls, type)
仅适用于新式的类。
import os, sys
path = os.path.dirname(os.path.abspath(__file__))
for py in [f[:-3] for f in os.listdir(path) if f.endswith('.py') and f != '__init__.py']:
mod = __import__('.'.join([__name__, py]), fromlist=[py])
classes = [getattr(mod, x) for x in dir(mod) if isinstance(getattr(mod, x), type)]
for cls in classes:
setattr(sys.modules[__name__], cls.__name__, cls)
答案 1 :(得分:3)
假设您的文件结构如下:
/Foo
A.py
B.py
C.py
要一次全部导入,您需要使用以下代码创建 init .py文件:
__all__ = ['A', 'B', 'C']
更改后的文件结构:
/Foo
A.py
B.py
C.py
__init__.py
比您只能使用
from Foo import *