python动态加载技术解析
前言
提到python动态加载技术,我们需要聊上几个话题:
1)反射技术
2)模块动态加载importlib
3) callback(函数名传递)--不完全算是吧动态
反射技术
先说反射技术,所谓反射技术就是指的是在程序的运行状态中,对于任意一个类,都可以知道这个类的所有属性和方法;对于任意一个对象,都能够调用他的任意方法和属性,增加删除方法和属性。这种动态获取程序信息以及动态调用对象的功能称为反射机制。
步骤:
具体一个应用场景,比如我们的testcase来自一个文本的创建的一个测试计划,其中是一个所要执行的测试用例的list
['test_test1', 'test_test2',...]
我们要执行它,比如我的测试实例是test_obj
反射中的setattr等不在本次讨论的范畴。
模块动态加载importlib
动态加载模块,可以用于,当我们已经知道我们的模块名称,在我们的目的是动态加载这些module用于运行;动态加载指在程序运行中,动态的加载模块,而不是在运行之前利用import 或from ... import 的方式加载模块的方式。
应用场景:
(1) 程序在运行期间才能确定加载的模块。
(2) 在某种条件下,需要通过模块名字符串进行加载的模块。
另外一个例子,我们的module中有很多个类,相同的方法,这样我们可以批处理进行调用
另外一种方式:
通过__import__加载
函数原型:__import__(name, globals={}, locals={}, fromlist=[], level=-1)
参数:name:模块名,包含路径
globals:全局变量,一般默认,如果设置,可设置globals()
locals:局部变量,一般默认,如果设置,可设置locals()
fromlist:导入的模块,及name下的模块名、函数名、类名或者全局变量名。
返回值:module对象,通过取module得属性获取模块得函数、类或者全局变量等。
另外一种方式:通过exec进行,但是不建议用邪恶的exec
callback方式(回调)
说到回调不得不提python的函数其实也是一种类型
比如你可以将一个函数名给一个变量
比如最常见的匿名函数
那么回调就是我们在执行一个函数时候,另外一个函数作为一个变量传入,以便对在该函数中由系统在符合你设定的条件时自动调用
这里不给赘述了,仅仅该一个例子,比如我们在实时读取文件的时候进行查找默写匹配的
到此这篇关于浅谈一下python动态加载技术的文章就介绍到这了,更多相关python动态加载内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
栏目分类
- BTC 中文站
- TLOS中文网
上一篇:1970款道奇挑战者