02 使用配置文件+反射实现
使用配置文件+反射实现
- 需要遵守:开放封闭原则
- 开放,针对配置开放
- 封闭,针对功能代码
目录结构
unicom
- app.py
- settings.py
- utils
- sms.py
- wechat.py
#seetings.py里面代码
MESSAGE_LIST =[
"utils.sms.send",
"utils.wechat.send"
]
#sms.py
def send(msg):
print("test2 发短信消息",msg)
#wechat.py
def send(msg):
print("test3 发wechat消息",msg)
# app.py里面代码
# 案例:三个人做项目开发
# test1,业务逻辑开发
# test2 发短信消息
# test3 发wechat消息
import importlib
def run():
# 反射+ 工厂模式(配置文件settings)
import seetings
"""
MESSAGE_LIST =[
"utils.sms.send",
"utils.wechat.send"
]
"""
print(seetings.MESSAGE_LIST)
for path_string in seetings.MESSAGE_LIST:
# 循环后,得到的字符串
# print('utils.sms.send')
# 表示从右开始找,找到第一个后进行切分 #得到结果是一个列表 ['utils.sms','send']
md_path, func_name = path_string.rsplit(".", maxsplit=1)
# 等于导入模块 from utils import sms
md = importlib.import_module(md_path)
# from utils import sms as md 字符串的形式导入 utils.sms
# 这样就找到了对应的函数,或者成员,然后执行
func = getattr(md, func_name)
func("CPU告警了")
if __name__ == ("__main__"):
run()
djogo模块,基于字符串模式导入