python importlib使用
# __import__是import语句的底层实现,解释器用的,是Python早期用于动态导入模块的函数,
# 而importlib模块是在Python 3中引入的,提供了更丰富的API来处理模块导入相关的操作。
import importlib
from importlib import util
def import_source_1(import_module_name):
"""
官方推荐使用importlib.import_module("module_name")来导入模块
:param import_module_name:
:return:
"""
# 1. 引入同目录下的模块
# 如果模块不存在,会报错,可以提前判断是否存在该模块,此方式仅可引入与当前文件同级的其他package
module_spec = importlib.util.find_spec(import_module_name)
# 如果返回None,说明没有找到该模块
if module_spec:
module = importlib.import_module(import_module_name)
print(module)
# 先获取是否存在属性或方法
print(hasattr(module, "test_03"))
func = module.test_method_outer
print(func)
cls = module.TestClass
print(cls)
# 拿到类对象后,可以实例化
obj = cls()
print(cls.value_test)
print(obj.value_test)
else:
print("导入的模块不存在:" + import_module_name)
def import_source_2(module_name, module_file_path):
"""
官方推荐使用importlib.import_module("module_name")来导入模块
:param module_name:
:param module_file_path:
:return:
"""
# 1. 引指定路径下的模块
# 如果模块不存在,会报错,可以提前判断是否存在该模块,此方式仅可引入与当前文件同级的其他package
# 创建模块规范
module_spec = importlib.util.spec_from_file_location(module_name, module_file_path)
# 根据规范创建模块
module = importlib.util.module_from_spec(module_spec)
# 执行模块
module_spec.loader.exec_module(module)
# 从执行的模块中找到想要执行的函数
func = module.test_03
func("test1", "test2")
# 从执行模块中找到想要执行的类
cls = module.Test01
# 示例化类
cls = cls()
# 执行类函数
cls.test_01()
def import_source_3(module_name, module_file_path):
"""
官方推荐使用importlib.import_module("module_name")来导入模块
:param module_name:
:param module_file_path:
:return:
"""
# 1. 引指定路径下的模块
# 如果模块不存在,会报错,可以提前判断是否存在该模块,此方式仅可引入与当前文件同级的其他package
# 创建模块规范
module_spec = importlib.util.spec_from_file_location(module_name, module_file_path)
# 根据规范创建模块
module = importlib.util.module_from_spec(module_spec)
module_spec.loader.exec_module(module)
# 使用getatter从执行的模块中找到想要执行的函数
func = getattr(module, "test_03")
func("test1", "test2")
# 使用getatter从执行的模块中找到想要执行的类
cls = getattr(module, "Test01")
# 实例化类
cls = cls()
# 执行类函数
cls.test_01()
if __name__ == '__main__':
import_source_3("test_demo", r"D:\MyCode\vue-learn\AjTmp\backend\AutoTestMain\PyCase\test_demo.py")
参考内容
【python中的类反射】https://blog.csdn.net/weixin_39743356/article/details/137086164
【python中的importlib模块】https://cloud.tencent.com/developer/article/1496629
分类:
软件测试 / python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix