Python_getattr+__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_getattr+__import__ 实现动态加载模块、类对象或函数的更多相关文章
- stevedore动态加载模块
stevedore动态加载模块,stevedore使用setuptools的entry points来定义并加载插件.entry point引用的是定义在模块中的对象,比如类.函数.实例等,只要在im ...
- OrchardCore 如何动态加载模块?
前言 今天,我们再次讨论下OrchardCore,通过初期调研,我们项目采用OrchardCore底层设施支持模块化,同时根据业务场景,额外还需支持二次开发,于是有了本文,若有不同解决方案,欢迎留言探 ...
- 转:从pickle看python类成员的动态加载和类的定位
pickle是Python轻便的对象序列化工具.使用pickle可以方便地把python对象写入文件对象中,或者像soap那样在socket间传送. 按照python的一贯作风,类的成员在 ...
- AngularJs 动态加载模块和依赖
最近项目比较忙额,白天要上班,晚上回来还需要做Angular知识点的ppt给同事,毕竟年底要辞职了,项目的后续开发还是需要有人接手的,所以就占用了晚上学习的时间.本来一直不打算写这些第三方插件的学习笔 ...
- __import__ 与动态加载 python module
原文出处: koala bear Direct use of __import__() is rare, except in cases where you want to import a m ...
- [driver]linux内核动态加载模块
问题: 1. 把编译好的模块放到板子/lib/modules对应文件夹下,并且执行了depmod -a, 比如pl2303.ko, 那么下一次插入pl2303的串口线,是否可以识别,也就是自动加载pl ...
- angular-ui-router动态加载模块
1.定义index.html主页,对于通用的js就不用require依赖加载了,其中main.js作为主模块,用require添加系统路由模块. <!DOCTYPE html> <h ...
- nginx平滑升级、在线添加模块(tengine 动态加载模块)
http://www.orzace.com/how-to-upgrade-nginx/ 下面是nginx替换成tengine再加上lua 模块,(tengine-2.0.1版本暂时无法动态加载lua模 ...
- Apache动态加载模块
添加步骤:如要额外安装cgi,先找到mod_cgi.c及mod_cgid.c.一般在apache安装包目录下,如 ./httpd-2.2.25/modules/generators .#编译安装 cg ...
随机推荐
- SpringBoot环境下java实现文件的下载
思路:文件下载,就是给服务器上的文件创建输入流,客户端创建输出流,将文件读出,读入到客户端的输出流中,(流与流的转换) package com.cst.icode.controller; import ...
- 【力扣】82. 删除排序链表中的重复元素 II
存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排列的结果链表. 示例 1: 输入:hea ...
- 04 - Vue3 UI Framework - 文档页
官网的首页做完了,接下来开始做官网的文档页 返回阅读列表点击 这里 路由设计 先想想我们需要文档页通向哪些地方,这里直接给出我的设计: 所属 子标题 跳转路径 文件名(*.vue) 指南 介绍 /do ...
- Mysql脚本 生成测试数据
使用: ./xie.sh -uroot -p'123456' #!/bin/bash #混合测试数据库脚本 #将创建一个single数据库,其中创建一个s1表 #如果数据库存在,将会写入数据,可以在写 ...
- Tableau预测指示器的运用
一.将订单日期拖拽两次到列,日期格式设置为年订单日期和月订单日期 二.将销售额拖拽至行,对应结果如下图所示 三.分析-趋势线-显示趋势线-显示选择整个视图 四.右键预测的任意位置,选择预测-描述预测- ...
- 【论文笔记】Recommendations as Treatments: Debiasing Learning and Evaluation
Recommendations as Treatments: Debiasing Learning and Evaluation Authors: Tobias Schnabel, Adith Swa ...
- [BUUCTF]PWN——picoctf_2018_buffer overflow 1/2
picoctf_2018_buffer overflow 1 附件 步骤: 例行检查,32位程序,没开保护 本地运行一下程序,看看程序大概的执行情况 32位ida载入,习惯性的检查程序里的字符串,发现 ...
- Notepad++ 常用功能:批量取消替换换行、强制刷新数据
批量取消替换换行 换行批量替换成空格 Ctrl+F 打开查找替换窗口,使用:\r\n 替换成 空格,全部替换 强制刷新数据源,重新加载数据 快捷键:Ctrl+R 或者 Alt+F 然后 L 或者点击菜 ...
- GaussDB(DWS)中共享消息队列实现的三大功能
摘要:本文将详细介绍GaussDB(DWS)中共享消息队列的实现. 本文分享自华为云社区<GaussDB(DWS)CBB组件之共享消息队列介绍>,作者:疯狂朔朔. 1)共享消息队列是什么? ...
- java 8 启动脚本优化 2
#!/bin/bash #链接文件 source /etc/profile #java虚拟机启动参数 #通过http://xxfox.perfma.com/jvm/check来检查参数的合理性 JAV ...