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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
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
1
2
3
4
5
6
7
8
9
10
11
12
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 @   总要做些什么  阅读(237)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
点击右上角即可分享
微信分享提示