根据字符串导入文件中的类

动态导入模块(基于反射当前模块成员)

解决根据字符串,进行匹配文件中的类或方法是否存在

from conf.setting import PLUGINS
import importlib
response = []
def test():
for k, v in PLUGINS.items():
module_path,class_name = v.rsplit('.',1) #根据。分割,只分割1次
# 动态导入模块,importlib.import_module(module_path)
classObj = getattr(importlib.import_module(module_path),class_name) #反射,查看是否有当前的类
print(classObj) #返回值是如果类存在,得到类的实例化对象
obj = classObj(hostname).execute()
response[k] = obj
return response
def _create_spider(self,path):
"""
根据反射找到类
:param path: 路径spider.chouti.ChoutiSpider
:return:
"""
module_path,cls_name = spider_cls_path.rsplit('.',maxsplit=1)
import importlib
m = importlib.import_module(module_path) #动态导入文件
if hasattr(m,cla_name): #基于反射判断类是否存在
cls = getattr(m,cls_name) #获取类
return cls() #实例化
Python 动态加载模块的3种方法
1,使用系统函数__import_()
- stringmodule = __import__('string')
2,使用imp 模块
- import imp
- stringmodule = imp.load_module('string',*imp.find_module('string'))
3,使用exec
- import_string = "import string as stringmodule"
- exec import_string

浙公网安备 33010602011771号