importlib、split、反射、鸭子类型
基于字符串方式的配置文件
###
import settings # 导入配置文件
import importlib # 导入模块
配置思路:
1.循环出对应的配置文件字符串
2.通过split进行切分,获取到模块的路径和文件当中类的名字,需要通过类名生成对象,然后用到python的鸭子类型
3.利用importlib生成模块
4.反射查找出模块当中的类名(cls存储)
5.利用类生成对象
6.对象.方法(这里就是用到python的鸭子类型,所有的类当中都有相同的方法)
def send_all(content):
for path_str in settings.NOTIFY_LIST: #'notify.email.Email'
module_path,class_name = path_str.rsplit('.',maxsplit=1)
# module_path = 'notify.email' class_name = 'Email'
# 1 利用字符串导入模块
module = importlib.import_module(module_path) # from notify import email
# 2 利用反射获取类名
cls = getattr(module,class_name) # Email、QQ、Wechat
# 3 生成类的对象
obj = cls()
# 4 利用鸭子类型直接调用send方法
obj.send(content)
作业