导入目录中的所有类?

时间:2011-06-05 22:56:08

标签: python

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

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

from A import *
from B import *
from C import *

使用动态内容,以便每次添加其他文件时都不会继续编辑__init__.py


glob解决方案似乎相当于

import A
import B
import C

完全不一样。

2 个答案:

答案 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 *