Python动态导入模块、类、属性
简单示例
文件结构
a #文件夹 │a.py b #文件夹 │b.py ├─c#文件夹 │c.py
c.py
args = {'a':1} class C: def c(self): pass
a.py
import importlib params = importlib.import_module('b.c.c') #绝对导入 params_ = importlib.import_module('.c.c',package='b') #相对导入 # 对象中取出需要的对象 params.args #取出变量 params.C #取出class C params.C.c #取出class C 中的c 方法
一个实际的示例
从url传参中获取参数,动态导入模块
from flask import Flask,request
import importlib
import unittest
app = Flask(__name__)
@app.route('/testcase/')
def testcase():
requests = request.args # 获取所有接收到的参数。
print(requests.get('file'))
filename = requests.get('file')
print(requests.get('class'))
clasname = requests.get('class')
print(requests.get('func'))
funcname = requests.get('func')
moud,clas = dynamicimport(filename,clasname)
# # 构造测试集
suite = unittest.TestSuite()
suite.addTest(clas(funcname))
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
return '<h1>Hello World!</h1>'
def dynamicimport(filename,clasname):
# 动态导入包
moud = importlib.import_module('testcase.%s' % filename, package='testcase')
# 实例化类
clas = getattr(moud, clasname)
## 获取类下的具体属性
# test = getattr(clas(), funcname)
## 遍历
# atts = dir(clas) # 获得case属性
# for att in atts:
# if 'test_' in att:
# print('%s running......' % att)
# test = getattr(clas(), att)() # 运行含有‘test_’的方法
# print('%s is complete' % att)
return moud,clas
if __name__ == '__main__':
app.run(host='127.0.0.1',port=8080,debug=True)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?