python settings模块导入不了_python settings 中通过字符串导入模块

1. 项目文件结构

set_test

├─ main.py # 入口函数

├─notify # 自定义的模块

│ ├─ email.py # 自定义模块

│ ├─ msg.py # 自定义模块

│ ├─ wechat.py # 自定义模块

│ └─ __init__.py # 模块导入初始化函数

└─set_test # 总配置文件

└─ settings.py

# 这个项目的架构是很多开源项目的架构标准

2. 接下来看看 文件中的内容

2.1. __init__.py 文件的内容 **

from set_test import settings # 导入配置文件

import importlib

# 指定路径, 找到指定文件, 并导入

# 作用与 import 模块名 相同

def send_init(context):

for path in settings.NOTTFY_LIST:

# 1. 将路径与类分开, 如

# ‘notify.email.Email‘ 分成了 [‘notify.email‘, ‘Email‘]

# module_path : 模块路径名

# class_name : 模块中的类名

module_path, class_name = path.rsplit(‘.‘, 1)

# 2. 利用 importlib 导致指定路径的模块文件

modle = importlib.import_module(module_path) # 导入 module_path 路径的文件

cls = getattr(modle, class_name) # 从 modle 模块中 找到 class_name 指定的类

# 所以此时 cls 就是 settings 中要执行的类了

# 3. 执行获取到的类

# a = cls()

# a.send(context) # 调用统一接口 send

# print(a)

if __name__ == ‘__main__‘:

send_init("send 调用")

2.2. notify 模块下的文件

2). wechat.py

#!/usr/bin/env python3

class WeChat(object):

def __init__(self):

pass

def send(self, content):

"""

固定格式, 每个添加的模块都写名字相同的方法, 方便统一调用, send 就是类的统一接口

:param content:

:return:

"""

print("WeChat")

3). email.py

#!/usr/bin/env python3

class Email(object):

def __init__(self):

pass

def send(self, content):

"""

固定格式, 每个添加的模块都写名字相同的方法, 方便统一调用, send 就是类的统一接口

:param content:

:return:

"""

print("Email")

msg.py 文件 与 email.py 只有文件名与类型不同,其他相同

3. 总结

3.1. 步骤

1). 将代码写在 __init__.py 中, 如果写在其他路径下的话, 一定要保证路径正确, 否则找不到模块

2). 导入 settings 中指定指定函数的列表, from set_test.settings import NOTTFY_LIST

3). 循环列表, 获取每一个元素对其进行操作

4). 将元素 切分成 路径、类名两部分,

5). 使用 modle = importlib.import_module(路径) 函数, 导入指定的文件

6). 使用 getattr(modle, 类名) 找到 文件中的指定类, 返回值就是所需要的类了

3.2. 介绍 及 使用途径

这样写是为了 开放封闭原则,使用避免取消或者添加功能时,需要改代码的问题

使用途径是在用户要执行多个模块功能时使用,写进 settings 文件的 NOTTFY_LIST 列表中的类会在调用模块时直接执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/436305.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IIS 7.0探索用于 Windows Vista 的 Web 服务器和更多内容

我经常听到 Microsoft 内部和外部的人将新的 IIS 7.0 Web 服务器称为 Microsoft 在过去几年中所进行的最重要的开发工作之一。考虑到 Microsoft 最近推出了一系列引人注意的技术,包括 Windows Vista™,这个评语具有重要意义! IIS 7.0 的发布时…

【转】三、QT例子-打开一个图片并且显示

一、前言 本博客的主要目的在于对QT有进一步的了解,单纯只使用QT。 今天小例子主要是打开图片,然后显示出来,并且显示图片的路径。 二、工程建立 1、参考前面 博客一QT安装过程里面的例子, 建立一个QT GUI Application 2、打开.u…

学习linux/unix编程方法的建议[转]

首先先学学编辑器,vim, emacs什么的都行。然后学make file文件,只要知道一点就行,这样就可以准备编程序了。 然后看看《C程序设计语言》K&R,这样呢,基本上就可以进行一般的编程了,顺便找本数据结构的书…

PPC(Pocket PC)中显示二进制数组(byte[])类型的图片

//给数组赋值,这里用的是通过WebService返回的二进制数组 byte[] img MyService.GetImg(textBox1.Text); MemoryStream ms new MemoryStream(img); Bitmap bt new Bitmap(ms); pictureBox1.Image Image.FromHbitmap(bt.GetHbitmap()); 转载于:https://www.cnblo…

【转】四、关于如何使用软件库的一个技巧-避免重复配置属性表

一、前言 我们需要使用各种函数库,比如Opencv,Itk, vtk,当不同的函数库使用的时候,在VS配置属性是一个很麻烦的问题,并且设计到不同函数库的交叉使用,所以这里提供一个小技巧。 那就是我们把每一个函数库的配置为属性表的形式&…

Linux编程练习 --多线程1--线程创建

POSIX线程—轻量级进程,线程调度是由内核调度程序完成的,线程所消耗的系统资源比较少,相互通讯也比较容易。 多线程的优点: 1.资源消耗量少。我们知道,在Linux系统下,启动一个新的进程必须分配给它独立的…

java configuration_关于JAVA 中的Configuration类

properties文件是Java平台默认的配置文件格式,其优点是格式清晰,简单易懂,使用commons-configuration读取properties文件也比较简单,代码如下:基本用法:1.加载jar包,我使用maven自动加载&#x…

Ajax Extensions核心控件介绍

摘自:http://www.cnblogs.com/remember515/archive/2007/06/28/799030.html Ajax的核心组件包括ScriptManager、ScriptManagerProxy、UpdatePanel、Timer、UpdateProgress,其相关属性如下:updatePanel控件UpdatePanel主要属性 UpdateMode 内容模板的更…

【转】五、VTK读取图片,然后QT显示

一、前言 今天实现的主要功能是通过vtk读取jpg图片(只能够读取.jpg文件),然后通过QT显示出来,整个程序的框架是QT GUIApplication 版本: VS2019VTK8.2.0QT5.13.1版本配置 VS 为release x64(这个是工程建立的时候设置的解决方案属性&#xff…

Linux编程练习 --多线程2--属性的设置

在上一篇的练习里,我们用pthread_create函数创建了一个线程,在这个线程中,我们使用了默认参数,即将该函数的第二个参数设为NULL。的确,对大多数程序来说,使用默认属性就够了,但我们还是有必要来…

使用Installshield制作asp,asp.net应用的安装程序

在使用asp,asp.net编写Web应用时,最大的烦恼莫过于程序的分发的部署,由于面向的最终用户,所以程序的安装的过程必须要简单,方便和快捷。 下面提供了Installshield的脚本,改脚本功能包括: 1&…

用java查询excel表格_如何把java查询出的内容导入到excel表格

展开全部java查询出的内容导入到excel表格/**导出数据为XLS格式* param fos* param bo*/public void writeExcelBo(FileOutputStream fos, java.util.Vector ve){jxl.write.WritableWorkbook wwb;try{wwb Workbook.createWorkbook(fos);jxl.write.WritableSheet ws wwb.createS…

【转】C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁

转自:https://www.cnblogs.com/marvin/p/PutDllToSpecificFolder.html?utm_sourcetuicool&utm_mediumreferral 系列文章 C#开发奇技淫巧一:调试windows系统服务C#开发奇技淫巧二:根据dll文件加载C或者Delphi插件C#开发奇技淫巧三&#…

【转】C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件

这两天忙着把框架改为支持加载C和Delphi的插件,来不及更新blog了。 原来的写的框架只支持c#插件,这个好做,直接用c#的反射功能便可。但是公司不是所有人都搞C#,也不是所有的程序C#都能很好的完成,又或者其他公司…

Linux编程练习 --多线程3--mutex

互斥指互相排斥的锁,是一种信号量,常用来防止两个进程或线程在同一时刻访问相同的共享资源 1.数据类型: 在Linux下, 线程的互斥量数据类型是pthread_mutex_t,我们定义一个互斥数据可以这样: pthread_mutex_t mutex; 2.…

java ppt转html_word,ppt,excel转pdf,pdf转html工具类搭建

我看到很多需求要求word,excel,ppt,pptx转pdf等工具类。还有就是pdf转图片转html这里介绍一个这个工具类。引入pom.xmlcom.asposeaspose-pdf11.0.0com.asposewords15.9.0com.asposeaspose-slides15.9.0工具类代码:package com.lvic.prsp.common.util;imp…

【转】一篇易懂的CAN通讯协议指南1

转自:https://zhuanlan.zhihu.com/p/162708070 本文力求以图文并茂来接好CAN通讯协议的基础知识,希望能给有兴趣的朋友带来一些收获。 为了便于大家理解与接受,请先看一幅图: 图1 电话会议 简单地讲CAN总线就如上图1中两根粗黄线…

长字串与短字串

procedure TForm1.Button1Click(Sender: TObject); vars1: ShortString; //为兼容老版本而存在s2: string; //长字串,相当于动态字符数组s3: string[10]; //短字串,相当于静态字符数组,代替 ShortString beginShowMessage(IntToStr(…

Linux编程练习 --多线程4--条件变量

上一篇练习了互斥锁的用法和原理,这次学习和互斥锁一起应用的cond--条件变量 1.互斥锁的存在问题: 互斥锁一个明显的缺点是它只有两种状态:锁定和非锁定。设想一种简单情景:多个线程访问同一个共享资源时,并不知道何时…

在PHP中实现中文汉字验证码

PHP代码<?php /********************************* * Code by Gently * 24/07/07 *严正声明&#xff1a;验证码为程序随机生成&#xff0c;“某种巧合”的词语组合属于正常现象&#xff0c; *某些别有用心的人不要借题发挥&#xff01; **************…