我有一个包含几个模块的包,每个模块都有一个类(或几个类)。我需要获取包中所有模块的列表。在python中有这个API吗?
这是文件结构:
\pkg\
\pkg\__init__.py
\pkg\module1.py -> defines Class1
\pkg\module2.py -> defines Class2
\pkg\module3.py -> defines Class3 and Class31
从 module1 中我需要获取 pkg 中的模块列表,然后导入这些模块中定义的所有类
更新1: 好的,在考虑了下面的答案和评论后,我认为,实现我的需求并不容易。为了使我在下面提出的代码有效,所有模块都应该事先明确导入。
所以现在这个新概念: 如何在不加载模块的情况下获取包中的模块列表?使用python API,即 - 没有列出包文件夹中的所有文件?
由于 AK
答案 0 :(得分:1)
一种特殊方法是列出目录中的文件,使用__import__
动态导入每个文件,然后列出生成的模块的类。
答案 1 :(得分:0)
import pkg
sub_modules = (
pkg.__dict__.get(a) for a in dir(pkg)
if isinstance(
pkg.__dict__.get(a), types.ModuleType
)
)
for m in sub_modules:
for c in (
m.__dict__.get(a) for a in dir(m)
if isinstance(m.__dict__.get(a), type(Base))
):
""" c is what I needed """