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__ 动态加载模块的主要内容,如果未能解决你的问题,请参考以下文章

Python反射

Python函数 __import__()

python26 封装 多态 常用的内置函数 `__str__` `__del__` 反射 动态导入模块

python内置函数和序列化

谁举例讲解几个python 内置函数

Python:import 与__import__()