【模塊補充】importlib

importlib

【一】介紹

  • importlib 模塊是 Python 中用于動態加載和導入模塊的內置模塊。
  • 它提供了一組函數和類,使得我們可以在運行時根據需要加載模塊,并且可以對已導入的模塊進行操作和管理。

【二】詳解及示例:

【1】動態加載模塊:

  • importlib 模塊提供了?import_module?函數
  • 通過該函數可以在運行時動態加載一個模塊。
  • 示例代碼如下:
import importlibmodule_name = 'math'  # 要加載的模塊名
math_module = importlib.import_module(module_name)

【2】導入指定模塊成員:

  • importlib 模塊還提供了?import_module?函數的變體?import_module
  • 它可以直接返回指定模塊的成員。
  • 示例代碼如下:
import importlibmodule_name = 'math'  # 要加載的模塊名
math_module = importlib.import_module(module_name)
sqrt_func = getattr(math_module, 'sqrt')

【3】重新加載模塊:

  • 在開發過程中,我們有時需要重新加載一個已經導入的模塊,以便應用最新的修改。
  • importlib 模塊提供了?reload?函數來實現這個功能。
  • 示例代碼如下:
import importlibmodule_name = 'my_module'  # 要重新加載的模塊名
my_module = importlib.import_module(module_name)
my_module = importlib.reload(my_module)

【4】獲取已導入的模塊列表:

  • 通過?sys.modules?可以獲取當前已導入的所有模塊的字典
  • 其中鍵為模塊名稱,值為模塊對象。
  • 以下示例演示如何遍歷已導入的模塊列表:
import sysfor module_name, module in sys.modules.items():print(module_name, module)

【群發功能演示】

【一】引入

  • 我們在Django的配置文件中,里面的中間件配置文件,雖然使用逗號分開,但是可以做到直接引入某個模塊
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]
  • 這種路徑構造方式,我們就可以通過importlib模塊實現

【二】推導過程

【1.0】引入

  • 定義一個包
def wechat(content):print(f"wechat接收到的通知:>>>{content}")def QQ(content):print(f"QQ接收到的通知:>>>{content}")def email(content):print(f"email接收到的通知:>>>{content}")
  • 啟動文件中啟動包
from send_message import *def send_all(content):wechat(content=content)QQ(content=content)email(content=content)if __name__ == '__main__':send_all("這是一條測試信息")

【2.0】升級

(1)功能部分
  • 先分別創建不同的消息功能文件
    • 在同一個文件夾下
    • 創建三個功能文件
class WeChat(object):def __init__(self):# 發送消息前的準備工作# 比如掉接口/初始化配置等passdef send(self, content):print(f"WeChat 發送的消息 :>>>{content}")class QQ(object):def __init__(self):# 發送消息前的準備工作# 比如掉接口/初始化配置等passdef send(self, content):print(f"QQ 發送的消息 :>>>{content}")class email(object):def __init__(self):# 發送消息前的準備工作# 比如掉接口/初始化配置等passdef send(self, content):print(f"email 發送的消息 :>>>{content}")
  • 在上面的文件內創建初始化文件
import settings
import importlibdef send_all(content):# 拿到每一個包的路徑for path_str in settings.MODEL_LIST:model_path, class_name = path_str.rsplit('.', maxsplit=1)# model_path : model.email# class_name : email# (1)利用字符串導入模塊# models : 模塊對象models = importlib.import_module(model_path)# (2)利用反射拿到類名cls = getattr(models, class_name)# (3)生成類的對象obj = cls()# (4)利用鴨子類型直接調用send發送消息obj.send(content)if __name__ == '__main__':send_all('1')
(3)調用部分
  • 在外部定義一個配置文件
MODEL_LIST = ['model.email.email','model.QQ.QQ','model.WeChat.WeChat',
]
  • 在外部的真正功能文件
import modelmodel.send_all('這是測試消息')
email 發送的消息 :>>>這是測試消息
QQ 發送的消息 :>>>這是測試消息
WeChat 發送的消息 :>>>這是測試消息

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167284.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167284.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167284.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyQt6簡介

鋒哥原創的PyQt6視頻教程: 2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~_嗶哩嗶哩_bilibili2024版 PyQt6 Python桌面開發 視頻教程(無廢話版) 玩命更新中~共計12條視頻,包括:2024版 PyQt6 Python桌面開發 視頻教程(無廢話版…

企業遠程訪問業務系統:對比MPLS專線,貝銳蒲公英為何更優優勢?

如今,企業大多都會采用OA、ERP、CRM等各種數字化業務系統。 私有云、公有云混合架構也變得越來越常見。 比如:研發系統部署在公司本地私有云、確保數據安全,OA采用公有云方案、滿足隨時隨地訪問需求。 如此一來,也產生了遠程訪問…

js前端跨屏效果

效果: 三個球 源碼: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>三個球</title> </h…

js實現圖片懶加載

方式一&#xff1a;html實現 在img標簽加上 loading"lazy" 方式二&#xff1a;js實現 通過js監聽頁面的滾動&#xff0c;實現的原理主要是判斷當前圖片是否到了可視區域&#xff1a; 拿到所有的圖片 dom 。遍歷每個圖片判斷當前圖片是否到了可視區范圍內。如果到了…

Maven項目下詳細的SSM整合流程

文章目錄 &#x1f389;SSM整合流程一、兩個容器整合? 1、先準備好數據庫config.properties連接、mybatis-config.xml&#x1f38a; 2、容器一&#xff1a;優先配置spring.xml文件&#x1f38a; 3、容器二&#xff1a;配置springMVC.xml文件&#x1f38a; 4、Tomcat整合spring…

解釋PCIe MSI 中斷要求中斷向量連續?PCIe 規范里并沒有明確指出

MSI 向量必須連續&#xff1f; 前言 MSI 物理條件&#xff0c;MSI 中斷產生的邏輯是RC初始化的時候&#xff0c;由軟件將配置寫入到 EP 的 2 個寄存器中&#xff0c;這兩個寄存器一個指示的是地址 Message Address&#xff0c;一個指示的是數據 Message Data。當 EP 試圖觸發…

你再不學Git就來不及了!!!

其他系列文章導航 設計模式合集 多線程合集 分布式合集 ES合集 文章目錄 其他系列文章導航 文章目錄 前言 版本控制 什么是版本控制 為什么要版本控制 一、認識 Git 1.1Git 簡史 1.2Git 與其他版本管理系統的主要區別 1.3Git 的三種狀態 二、Git 使用快速入門 2.1獲…

springboot使用redis緩存亂碼(key或者 value 亂碼)一招解決

如果查看redis中的值是這樣 創建一個配置類就可以解決 package com.deka.config;import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; i…

CPU+GPU多樣化算力,ZStack Cloud助力游戲精釀核心業務上云

游戲精釀通過ZStack Cloud云平臺提供高性能、高可用的云主機、云存儲和云網絡&#xff1b;前期通過超融合架構快速構建云基礎設施&#xff0c;來支持Jira、Redis等關鍵業務&#xff1b;并實現對原有私有云平臺業務的替代&#xff0c;按需將原有私有云業務滾動遷移到ZStack Clou…

移動端瀏覽器 jquery 獲取 pdf blob文件流 預覽pdf

最近遇到一個需求&#xff0c;一個古早的移動端 juery 項目要求做一個頁面&#xff0c;從接口獲取 pdf 文件流&#xff0c;然后預覽出來 這里使用第三方工具&#xff1a;pdf.js 代碼如下&#xff1a; // 引入相關文件<script src"../js/pdf.js" type"text…

N_1 驗證密碼

N_1 驗證密碼 題目 設計一個用戶密碼驗證程序&#xff0c;要求密碼輸入只有3次機會&#xff0c;且密碼中不能包含”*”字符。 分析 需要考慮3個問題&#xff1a;驗證次數、特殊字符和正誤密碼判斷&#xff1b;驗證次數需要使用循環&#xff0c;3個問題需要用到分支結構&…

java 系統屬性和環境屬性

Java系統屬性和環境屬性都是與Java應用程序相關的參數&#xff0c;但它們有以下區別&#xff1a; 系統屬性是由Java虛擬機&#xff08;JVM&#xff09;設置的&#xff0c;而環境屬性是由操作系統設置的。 系統屬性是以“-D”開頭的命令行參數傳遞給JVM的&#xff0c;而環境屬性…

深入理解Spring AOP的工作流程

文章目錄 引言什么是AOP&#xff1f;Spring AOP的工作原理1. JDK動態代理2. CGLIB代理 Spring AOP的注解方式Aspect注解EnableAspectJAutoProxy注解 Spring AOP的工作流程拓展應用1. 自定義注解2. 異常處理3. 切面優先級 結論 &#x1f389;深入理解Spring AOP的工作流程 ☆* o…

關于運行軟件程序出現vcruntime140.dll丟失的修復教程-解決方案

vcruntime140.dll是Microsoft Visual C庫文件的一部分&#xff0c;用于支持Windows操作系統上的應用程序。如果找不到或丟失了這個文件&#xff0c;可能會導致某些應用程序無法正常運行。下面是關于vcruntime140.dll丟失的5個修復方法&#xff0c;以及vcruntime140.dll文件屬性…

Python基礎教程之分支結構詳解

文章目錄 一、分支結構二、單分支結構三、雙分支結構四、多分支結構五、嵌套分支結構六、三元表達式七、條件測試關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③P…

Elasticsearch基礎優化

分片策略 分片和副本得設計為ES提供支付分布式和故障轉移得特性&#xff0c;但不意味著分片和副本是可以無限分配&#xff0c; 而且索引得分片完成分配后由于索引得路由機制&#xff0c;不能重新修改分片數&#xff08;副本數可以動態修改&#xff09; 一個分片得底層為一個l…

python之pyqt專欄2-項目文件解析

項目結構 在上一篇文章python之pyqt專欄1-環境搭建&#xff0c;創建新的pyqt項目&#xff0c;下面我們來看一下這個項目下的文件。 從下面的文件結構圖可以看到&#xff0c;該項目下有3個文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…

Feign接口請求返回異常 no suitable HttpMessageConvert found for response type

問題場景&#xff1a; 后端調用feign接口請求, 接口返回異常, no suitable HttpMessageConvert found for response type 問題描述 報錯異常如下&#xff1a; //根據圖片特征 去查詢人員信息ResultVo<List> personVos ipbdFaceLibPersonApi.queryFacePersonByFeatur…

華為云之SFS彈性文件服務使用體驗

華為云之SFS彈性文件服務使用體驗 一、本次實踐介紹1.1 實踐環境簡介1.2 本次實踐目的 二、SFS彈性文件服務介紹2.1 SFS彈性文件服務簡介2.2 SFS彈性文件服務特點 三、購買ECS彈性云服務器3.1 購買ECS彈性云服務器3.2 查看ECS彈性云服務器狀態3.3 遠程連接ECS3.4 檢查操作系統版…

package.json 中的版本號,符號 ~ 與 ^ 的區別及其他符號的含義

"element-ui": "^2.15.1", 版本號&#xff1a; 2.15.1 對應 x.y.z z &#xff1a;表示一些小的bugfix, 更改z的號&#xff1b;(修復補丁-z)&#xff08;~符號&#xff09; y &#xff1a;表示一些大的版本更改&#xff0c;比如一些API的變化&#xff1b;(…