美文网首页
目录反射使用

目录反射使用

作者: 两点半的杂货铺 | 来源:发表于2018-03-18 14:56 被阅读4次

    一、传统方法

    创建一个方法,里面封装对应好的类,用字典封装,然后对应返回指定的方法

    from .plugins.disk import DiskPlugin
    from .plugins.mem import MemPlugin
    
    def pack():
        obj1 = DiskPlugin()
        disk_info = obj1.execute()
    
        obj1 = MemPlugin()
        men_info = obj1.execute()
    
    
        response = {
            'disk':disk_info,
            'men':men_info,
        }
    
        return response
    

    缺点当变成人员,在写子类时,需要更改这个方法,往里字典中加入对应的方法

    二、配置映射法

    思路和django的settings文件配置思路一致
    setting.py写法

    PLUGINS = {
        'disk':'src.plugins.disk.DiskPlugin',
        'mem':'src.plugins.disk.MemPlugin',
    }
    
    • importlib.import_module 导入对应的py文件
    • getattr(m,clsname) 获取对应文件的方法
    • m_path,clsname = v.rsplit('.',maxsplit=1)从右截取直接去一个
    from conf import setting
    import  importlib
    def pack():
        response = {}
        for k,v in setting.PLUGINS.items():
            m_path,clsname = v.rsplit('.',maxsplit=1)
            m = importlib.import_module(m_path)
            cls = getattr(m,clsname)
            #反射
            response[k] = cls().execute()
    
        return response
    

    相关文章

      网友评论

          本文标题:目录反射使用

          本文链接:https://www.haomeiwen.com/subject/bcreqftx.html