02 使用配置檔案+反射實現

jhchena發表於2024-09-28

使用配置檔案+反射實現

  • 需要遵守:開放封閉原則
    • 開放,針對配置開放
    • 封閉,針對功能程式碼

目錄結構

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模組,基於字串模式匯入

相關文章