关于python:导入目录中的所有类?

Import all classes in directory?

我找到了这个,但这不是我想做的。

我想导入目录中所有文件中的所有类。基本上,我想替换这个:

1
2
3
from A import *
from B import *
from C import *

有一些动态的,这样我就不会每次添加另一个文件时都继续编辑我的__init__.py

glob解决方案似乎等同于

1
2
3
import A
import B
import C

这完全不一样。


您可以这样做,尽管记住isinstance(cls, type)只适用于新样式的类。

1
2
3
4
5
6
7
8
9
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)