首页 > 其他分享 >importlib模块

importlib模块

时间:2024-03-28 17:36:38浏览次数:34  
标签:importlib module content send 模块 path import class

import importlib
res = 'myfile.b'
ret = importlib.import_module(res) # from myfile import b
# 该方法最小只能到py文件名
print(ret)

 

 

def send_all(content):
    for path_str in settings.NOTIFY_LIST:  #'notify.email.Email'
        module_path,class_name = path_str.rsplit('.',maxsplit=1)
        # module_path = 'notify.email'  class_name = 'Email'
        # 1 利用字符串导入模块
        module = importlib.import_module(module_path)  # from notify import email
        # 2 利用反射获取类名
        cls = getattr(module,class_name)  # Email、QQ、Wechat
        # 3 生成类的对象
        obj = cls()
        # 4 利用鸭子类型直接调用send方法
        obj.send(content)

 

 

实现直接#注销即可停用此服务,

django.middleware.csrf.CsrfViewMiddleware 等同于 from django.middleware.csrf import CsrfViewMiddleware



 

start.py:

import notify

notify.send_all('快发工资了')

 

 email.py:

class Email(object):
    def __init__(self):
        pass #发送邮箱徐璈做的前期准备工作


    def send(self,content):
        print('邮箱通知:%s'%content)

 

 

qq.py:

class QQ(object):
    def __init__(self):
        pass #发送QQ徐璈做的前期准备工作


    def send(self,content):
        print('QQ通知:%s'%content)

 

wechat.py:

class Wechat(object):
    def __init__(self):
        pass #发送微信徐璈做的前期准备工作


    def send(self,content):
        print('微信通知:%s'%content)

 

__init__.py:

import setting
import importlib


def send_all(content):
    for path_str in setting.NOTIFY_LIST:
        module_path,class_name=path_str.rsplit('.',maxsplit=1)
        #module_path='notify.email'  class_name='Email'
        #1.利用字符串导入模块
        module=importlib.import_module(module_path)
        #2.利用反射获取类名
        cls=getattr(module,class_name)
        #3.生成类的对象
        obj=cls()
        #4.利用鸭子类型直接调用send方法
        obj.send(content)

 

 

msg.py:

class Msg(object):
    def __init__(self):
        pass #发送短信徐璈做的前期准备工作


    def send(self,content):
        print('短信通知:%s'%content)

 

setting.py:

NOTIFY_LIST=[
    'notify.email.Email',
    'notify.qq.QQ',
    # 'notify.wechat.Wechat'
    'notify.msg.Msg'
]

 

标签:importlib,module,content,send,模块,path,import,class
From: https://www.cnblogs.com/97zs/p/18102198

相关文章

  • FPGA入门笔记010——UART串口接收模块设计
    1、串口接收模块原理​当对于数据线Rs232_Rx上的每一位进行采样时,一般情况下认为每一位数据的中间点是最稳定的。因此一般应用中,采集中间时刻时的电平即认为是此位数据的电平,如图1所示。图1——串口接收时序图(图中BPS_CLK为采样时钟)​但是在实际工业应......
  • BOSHIDA DC电源模块的设计与制造流程
    BOSHIDADC电源模块的设计与制造流程 DC电源模块是一种用于将交流电转换为直流电的设备。它广泛应用于各种电子设备中,如电子产品、工业仪器、电视等。下面是DC电源模块的设计与制造流程的简要描述: 1.需求分析:在设计DC电源模块之前,首先需要进行需求分析。这包括确定输出电......
  • 在Vue项目中使用Vuex进行状态管理是一种常见做法。下面是一个简单的示例,展示了如何创
    步骤1:创建VuexStore首先,你需要创建一个Vuexstore。通常,这是在你的项目的store目录下完成的。//store.jsimportVuefrom'vue';importVuexfrom'vuex';Vue.use(Vuex);conststore=newVuex.Store({state:{count:0},mutations:{increment(......
  • git 添加子模块
    子模块的添加添加子模块非常简单,命令如下:gitsubmoduleadd<url><path>其中,url为子模块的路径,path为该子模块存储的目录路径。执行成功后,gitstatus会看到项目中修改了.gitmodules,并增加了一个新文件(为刚刚添加的路径)gitdiff--cached查看修改内容可以看到增加了子模块,并且......
  • 巨控GRM110系列:短距离内的无线通讯模块
    标签:#巨控GRM110#无线通讯#ROLA技术#工业自动化#远程数据采集在工业自动化和智能制造的领域中,数据的准确传输是实现高效生产的关键。随着技术的不断进步,无线通讯技术已成为破解远距离数据传输难题的利器。今天,我们将聚焦于一款革命性的无线通讯模块——巨控GRM110系......
  • nodejs 核心模块
    nodejs核心模块Node.js的核心模块是Node.js发行版自带的模块,无需通过npm进行安装。你可以在Node.js的官方文档中找到所有核心模块的详细列表。以下是一些常用核心模块的简单使用示例:http 模块:创建一个简单的HTTP服务器。  consthttp=requir......
  • 模块化软件开发
    目录模块化软件开发是一种将软件系统划分为独立命名且可独立访问的模块的开发方法。每个模块都具有特定的功能或职责,并且可以独立地开发、测试,最后组装成完整的软件。这种方法的主要目的是降低软件系统的复杂性,提高开发效率,以及增强软件的可维护性。在模块化软件开发中,每个模......
  • 06-python异常和模块
    异常语法try:可能会错误的代码except:出现了异常,异常处理else:没有出现异常,处理,通常可以不写finally:无论有无异常,都运行实例:try:f=open("e:/a.txt","r",encoding="UTF-8")#文件不存在,不可度,会有异常exceptFileNotFoundErrorase:......
  • opensips的dispatcher模块笔记
    操作系统:CentOS7.6_x64opensips版本:2.4.9dispatcher模块模块实现了基于目的地址的调度功能,可用作无状态负载均衡,但不能保证均匀分配。今天整理下CentOS7环境下opensips2.4.9的dispatcher模块使用示例,并提供运行效果视频。我将从以下几方面进行展开:模块数据库说明模块参......
  • Python中的datetime模块:轻松拿捏时间操作
    前言在Python中,处理日期和时间是非常常见的任务,无论是在开发Web应用程序、数据分析还是其他领域。datetime模块为我们提供了丰富的功能,可以轻松处理日期和时间,从简单的日期算术运算到复杂的时区转换,应有尽有。本文将深入探讨datetime模块的功能和用法,帮助大家轻松拿捏时间操作。......