一、传统方法
创建一个方法,里面封装对应好的类,用字典封装,然后对应返回指定的方法
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
网友评论