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模块,基于字符串模式导入

posted @ 2024-09-28 07:53  jhchena  阅读(6)  评论(0编辑  收藏  举报