需求:做不同的操作时只需修改配置文件即可完成

# message/email.py

from .base import Base  # 子类必须实现send方法,否则抛出异常

class Email(Base):
"""
发送邮件提醒相关
"""
def __init__(self):
"""
邮箱相关数据初始化
"""
self.username = 'zhou'
self.pwd = '' def send(self,msg):
pass
#message/msg.py

from .base import Base

class Msg(Base):
"""
发送短信提醒相关
""" def __init__(self):
"""
短信相关数据初始化
"""
self.username = 'asdf'
self.pwd = 'asdf' def send(self, msg):
pass
# settings.py

MSG_LIST = [
"utils.message.email.Email",
"utils.message.msg.Msg",
"utils.message.wechat.WeChat",
]
# message/init.py

import settings
import importlib def send_msgs(msg): for path in settings.MSG_LIST:
m,c = path.rsplit('.',maxsplit=1)
md = importlib.import_module(m) #导入模块
obj = getattr(md,c)() # 利用反射找到方法
obj.send(msg) # 执行方法
#使用

from message import send_msgs

send_msgs("xxxxx")

更好的利用配置文件和importlib的更多相关文章

  1. 如何更好地利用Pmd、Findbugs和CheckStyle分析结果

    这里列出了很多Java静态分析工具,每一种工具关注一个特定的能发挥自己特长的领域,我们可以列举一下: Pmd 它是一个基于静态规则集的Java源码分析器,它可以识别出潜在的如下问题:– 可能的bug— ...

  2. ssm+redis 如何更简洁的利用自定义注解+AOP实现redis缓存

    基于 ssm + maven + redis 使用自定义注解 利用aop基于AspectJ方式 实现redis缓存 如何能更简洁的利用aop实现redis缓存,话不多说,上demo 需求: 数据查询时 ...

  3. .Net 更容易的使用配置文件 SuperConfig

    一.原始配置文件的问题 我们在做开发时,不管是B/S还是C/S,现在几乎所有的项目都会碰到使用配置文件,简单点的如链接字符串.上传路径啊,一些API的接口地址等等.复杂点就更多了,如ActiveMQ的 ...

  4. 程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)-----https://www.cnblogs.com/JavaArchitect/p/9080484.html

    https://www.cnblogs.com/JavaArchitect/p/9080484.html 程序员如何在百忙中更有效地利用时间,如何不走岔路,不白忙(忙得要有效率,要有收获)

  5. 如何更好的利用redis

    原文地址http://oldblog.antirez.com/post/take-advantage-of-redis-adding-it-to-your-stack.html @(syoka)[re ...

  6. 如何更好的利用Node.js的性能极限

    通过使用非阻塞.事件驱动的I/O操作,Node.js为构建和运行大规模网络应用及服务提供了很好的平台,也受到了广泛的欢迎.其主要特性表现为能够处理庞大的并且高吞吐量的并发连接,从而构建高性能.高扩展性 ...

  7. zabbix系列 ~ 如何更好的利用mysql监控

    一 简介:今天来聊聊一些关于mysql 监控需要关注的问题二 实现的原理   1 global status   2 variables 三 我们需要关注的zabbix性能图  1 事务类型      ...

  8. 利用 SysRq 键排除和诊断系统故障

    说白了,SysRq手动触发而不用命令, /proc/sysrq-trigger 这个是通过命令接口 实验:LINUX窗口下 ,CTRL+ALT+F1,切换到TTY1,在文本模式下,按下 ALT+Sys ...

  9. vue(1)——node.js安装使用,利用npm安装vue

    node node简介 node.js也是用js开发的语言,而且是一门服务端语言,更有大神利用node写了一个操作系统出来——NodeOS node能干什么 自带下载工具: 对于我们开发前端项目,no ...

随机推荐

  1. oracle客户端免安装配置、64位机器PL/SQL和VS自带的IIS连接问题

    一.oracle客户端免安装配置 1.到oracle官网下载Oracle InstantClient, 把它解压缩到单独目录,例如C:\OracleClient,2. 添加环境变量 ORACLE_HO ...

  2. WPF 在事件中绑定命令

    导航:MVVMLight系列文章目录:<关于 MVVMLight 设计模式系列> 其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实 ...

  3. C#资源释放及Dispose、Close和析构方法

    https://www.cnblogs.com/luminji/archive/2011/01/05/1926468.html C#资源释放及Dispose.Close和析构方法   备注:此文的部分 ...

  4. hdu 5038 水题 可是题意坑

    http://acm.hdu.edu.cn/showproblem.php?pid=5038 就是求个众数  这个范围小 所以一个数组存是否存在的状态即可了 可是这句话真恶心  If not all ...

  5. oracle非归档模式下的冷备份和恢复

    查看归档的相关信息 SQL> archive log list数据库日志模式             非存档模式自动存档             禁用存档终点            USE_DB ...

  6. with revoked permission android.permission.CAMERA

    1,刚出现这样的问题我是直接把 CAMERA 移除掉 2.第一步判断时候授权. if (Build.VERSION.SDK_INT >= 23) { int checkCallPhonePerm ...

  7. Nginx遇上Access Denied提示怎么解决

    这几天在摆弄linux下面的各种服务器,对nginx非常有兴趣. 于是把phpmyadmin传上去了,先是phpmyadmin配了半天,结果配好之后发现phpmyadmin一些logo.css.js文 ...

  8. php学习十四:抽象,接口和多态

    多态为面向对象编程的精华所在,js等面向过程的语言虽然可以模拟面向对象,但是毕竟模仿的永远比不上真的,所以了解而且会使用面向对象的多态是必不可少的 在了解多态之前,我们必须要了解接口,但是接口又是在抽 ...

  9. ubuntu 备忘

    卷组扩容 Linux mint采用默认卷组的安装方式 sain@Linux ~ $ df -hl Filesystem Size Used Avail Use% Mounted on udev .7G ...

  10. 【Mysql】大数据处理优化方法

    1.应尽量避免在 where 子句中使用 != 或  <>  操作符,否则将引擎放弃使用索引而进行全表扫描. 2.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 orde ...