目录反射使用

一、传统方法

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

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

你可能感兴趣的:(目录反射使用)