Python内置函数 __import__ 动态加载模块
Posted 不自在
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python内置函数 __import__ 动态加载模块相关的知识,希望对你有一定的参考价值。
__import__()
语法
__import__(name[, globals[, locals[, fromlist[, level]]]])
参数
- name -- 字符串,模块的导入路径
说明
1. 函数功能用于动态的导入模块,主要用于反射或者延迟加载模块。
2. __import__(A)相当于import A
3. __import__(A.B.C, fromlist(C,))相当于from A.B import C,如果fromlist不传入值,则返回包A,如果fromlist传入值,则返回包C
getattr()
getattr() 函数用于返回一个对象属性值。
语法
getattr(object, name[, default])
参数
- object -- 对象。
- name -- 字符串,对象属性。
- default -- 默认返回值,如果不提供该参数,在没有对应属性时,将触发 AttributeError。
实现动态加载
__import__实现动态导入包,getattr实现动态获取函数的引用或类对象的引用或类对象属性的引用,将两种方法结合就可以实现动态加载模块的同时,动态调用函数。
参考代码
demo.py代码如下
from flask import request, jsonify from ihome_app.api import api @api.route("/execute", methods=["POST"]) def execute_case(): # 获取传入参数 req = request.get_json() # 获取用例集 cases = req.get("cases") for case in cases: # 动态导入每个用例包的引用 case_package = __import__(f"ihome_app.test.{case}", fromlist=(case, )) # 获取包中用例的函数引用 case_name = getattr(case_package, case) # 执行用例 case_name() return jsonify(code=0, msg="用例执行成功")
代码中为函数的动态执行,类对象原理一样,需要注意的是getattr方法的第二个参数类型为字符串
以上是关于Python内置函数 __import__ 动态加载模块的主要内容,如果未能解决你的问题,请参考以下文章