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

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

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

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_()

  1. stringmodule = __import__('string')

2,使用imp 模块

  1. import imp
  2. stringmodule = imp.load_module('string',*imp.find_module('string'))

3,使用exec

  1. import_string = "import string as stringmodule"
  2. exec import_string
posted @ 2017-05-23 14:15  总要做些什么  阅读(247)  评论(0)    收藏  举报