再次仿照django中间件的写法 写出初级功能的调用

前言:
django中间件的配置,均有字符串组成,将字符串注释后则取消对字符串的调用,将字符写上 则代表对字符串可在全局中使用,而我们所要考虑的是字符串为什么能够完成对其背后的函数的调用

模板

消息通知:

想同时发送qq,微信,邮箱,短信通知,

第一步:
建立一个py package(qq.py,wechat.py,email.py,__init__.py)

在各自的py文件,完成对类的书写,

在建立 settings 和 start文件

settings里配置 各自的位置列表 

关键点

NOTIFY_LIST = [
    'notify.email.Email',
    'notify.qq.Qq',
    'notify.wechat.Wechat',
]
#若列表如上所示 如何取出并完成类的实例化形成对象
import importlib
for path_st in NOTIFY_LIST:
    module_str,class_name = path_str.rsplit('.',maxsplit=1)
    module = importlib.import_module(module_path)#相当于from notify import email
        cls = getattr(module,class_name) #利用反射拿到类
        obj = cls() #类的实例化
    
   

主要关键点 是 importlib 和 getattr的使用 都是基础的模块 即使学了很久似乎也无法结合这样一种的编程思想。

 

posted @ 2021-07-10 17:36  不想拖累他人  阅读(35)  评论(0)    收藏  举报