【发布时间】:2025-11-28 14:45:01
【问题描述】:
如果我定义一个模块module,其对应目录为module/,我可以从a.py或b.py等子模块动态加载类吗?
--模块
----a.py
----b.py
这需要知道要搜索的类名吗?我可以设置一个以某种方式加载这些孩子的基类吗?
基本用例是允许用户编写一些他或她自己的代码以供程序加载。就像 rails 允许您在某些目录中编写自己的控制器、视图和模型一样。
到目前为止我动态加载模块的代码是
def load(folder):
files = {}
for filename in os.listdir(folder):
if (filename[0] != '_' and filename[0] != '.'):
files[filename.rstrip('.pyc')] = None
# Append each module to the return list of modules
modules = []
mod = __import__(folder, fromlist=files.keys())
for key in files.keys():
modules.append(getattr(mod, key))
return modules
我希望修改它以返回类对象。
【问题讨论】:
-
如果您查看其他 SE questions 关于 python 模块数据结构的信息,第三个答案给出了一个很好的简短答案。我想你可以做一些事情:
from module import a动态。