做外贸网站流程,烟台网站网站建设,做网站用asp还是php,上海网站seo策划importlib
【一】介绍
importlib 模块是 Python 中用于动态加载和导入模块的内置模块。它提供了一组函数和类#xff0c;使得我们可以在运行时根据需要加载模块#xff0c;并且可以对已导入的模块进行操作和管理。
【二】详解及示例#xff1a;
【1】动态加载模块#…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(fwechat接收到的通知:{content})def QQ(content):print(fQQ接收到的通知:{content})def email(content):print(femail接收到的通知:{content})
启动文件中启动包
from send_message import *def send_all(content):wechat(contentcontent)QQ(contentcontent)email(contentcontent)if __name__ __main__:send_all(这是一条测试信息)
【2.0】升级
1功能部分
先分别创建不同的消息功能文件 在同一个文件夹下创建三个功能文件
class WeChat(object):def __init__(self):# 发送消息前的准备工作# 比如掉接口/初始化配置等passdef send(self, content):print(fWeChat 发送的消息 :{content})class QQ(object):def __init__(self):# 发送消息前的准备工作# 比如掉接口/初始化配置等passdef send(self, content):print(fQQ 发送的消息 :{content})class email(object):def __init__(self):# 发送消息前的准备工作# 比如掉接口/初始化配置等passdef send(self, content):print(femail 发送的消息 :{content})
在上面的文件内创建初始化文件
import settings
import importlibdef send_all(content):# 拿到每一个包的路径for path_str in settings.MODEL_LIST:model_path, class_name path_str.rsplit(., maxsplit1)# 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 发送的消息 :这是测试消息