使用配置檔案+反射實現
- 需要遵守:開放封閉原則
- 開放,針對配置開放
- 封閉,針對功能程式碼
目錄結構
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模組,基於字串模式匯入