扩展性很强的python实现方式
一:先上目录结构

二:各个文件的代码
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time : 2018/7/4 16:42 from utils.message import send_msgs send_msgs('')
app.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time : 2018/7/4 16:42 MSG_LIST={
# 可以添加或注释
'utils.message.email.Email',
'utils.message.msg.Msg',
}
settings
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time : 2018/7/4 16:42 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)
__init__.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time : 2018/7/4 17:05
# 相当于java中的接口 class Base(object):
def send(self, msg):
raise NotImplementedError('没有实现send方法')
base.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time : 2018/7/4 16:51
from .base import Base
class Email(Base):
'''
发送邮件相关
'''
def __init__(self):
'''
邮箱相关数据初始化
'''
self.username='aaa'
self.pwd='bbb'
def send(self,msg):
print('Email',msg)
pass
email.py
# -*- coding: utf-8 -*-
# @Author : Felix Wang
# @time : 2018/7/4 16:53
from .base import Base class Msg(Base):
'''
发送短信相关
''' def __init__(self):
'''
短信相关数据初始化
'''
self.phonenum = '' def send(self, msg):
print('Msg',msg)
pass
msg.py
这种方式代码和代码之间的耦合性很低,可扩展性很强,可以用在数据库操作上
操作的时候只要修改settings文件就行了
如果要扩展其他发送信息的方法只要按照格式在message目录下新建一个类,实现方法,然后添加到settings中
如果不用某种方法只要在settings中注释掉
这种方式在scrapy框架中用的非常多。
扩展性很强的python实现方式的更多相关文章
- MySQL - 扩展性 1 概述:人多未必力量大
我们应该接触过或者听说过数据库的性能瓶颈问题.对于一个单机应用而言,提升数据库性能的最快路径就是氪金 - 买更高性能的数据库服务器,只要钱到位,性能不是问题. 但是当系统性能增加到一定地步时,你会发现 ...
- TCP接入层的负载均衡、高可用、扩展性架构
一.web-server的负载均衡 互联网架构中,web-server接入一般使用nginx来做反向代理,实施负载均衡.整个架构分三层: 上游调用层,一般是browser或者APP 中间反向代理层,n ...
- python基础----封装、封装与扩展性
从封装本身的意思去理解,封装就好像是拿来一个麻袋,把小猫,小狗,小王八,还有egon和alex一起装进麻袋,然后把麻袋封上口子.但其实这种理解相当片面 首先我们要了解 要封装什么 你钱包的有多少钱(数 ...
- 【Java/Android性能优 4】PreloadDataCache支持预取的数据缓存,使用简单,支持多种缓存算法,支持不同网络类型,扩展性强
本文转自:http://www.trinea.cn/android/preloaddatacache/ 本文主要介绍一个支持自动向前或向后获取新数据的缓存的使用及功能.Android图片内存缓存可见I ...
- Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
本文主要介绍一个支持图片自动预取.支持多种缓存算法的图片缓存的使用及功能.图片较大需要SD卡保存情况推荐使用ImageSDCardCache. 与Android LruCache相比主要特性:(1). ...
- 【Java/Android性能优5】 Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
本文转自:http://www.trinea.cn/android/android-imagecache/ 主要介绍一个支持图片自动预取.支持多种缓存算法.支持二级缓存.支持数据保存和恢复的图片缓存的 ...
- python之封装与扩展性
1.封装与扩展性 封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用的代码:而外部使用者只知道一个接口(函数),只要接口(函数)名,参数不变,使用者的代码永远无需改变.这就提供了一 ...
- Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结
Atitit.软件架构高扩展性and兼容性原理与概论实践attilax总结 1. 什么是可扩展的应用程序?1 2. 松耦合(ioc)2 3. 接口的思考 2 4. 单一用途&模块化,小粒度化2 ...
- 面向对象 - 1.封装之如何实现属性的隐藏/2.封装的意义/3.封装与扩展性/4.property的使用
1.封装之如何实现属性的隐藏封装: __x=1 # 把数据属性隐藏 (如何实现隐藏) 类定义阶段 __开头发生了变形 __x --> _A__x特点: 1.在类外部无法直接:obj.__Attr ...
随机推荐
- Go语言GOMAXPROCS(调整并发的运行性能)
在 Go语言程序运行时(runtime)实现了一个小型的任务调度器.这套调度器的工作原理类似于操作系统调度线程,Go 程序调度器可以高效地将 CPU 资源分配给每一个任务.传统逻辑中,开发者需要维护线 ...
- JDK1.8新特性(二):Collectors收集器类
一. 什么是Collectors? Java 8 API添加了一个新的抽象称为流Stream,我们借助Stream API可以很方便的操作流对象. Stream中有两个方法collect和collec ...
- 搞懂ZooKeeper到底是做啥的
一.ZooKeeper是啥 ZooKeeper概念 ZooKeeper是一个开源的分布式协调服务(a service for coordinating processes of distributed ...
- nginx部署vue前端,刷新出现404或者500错误的解决方案
在nginx配置文件的server下加上 try_files $uri $uri/ /index.html; 不加的话是404,路径错误是500,这里的路径只要照着/index.html就行,不用加上 ...
- 带坑使用微信小程序框架WePY组件化开发项目,附带第三方插件使用坑
纯粹用来记录wepy及相关联内容,以防再犯~ 1. 接手的wepy项目版本是 1.7.2 ,so我没有初始化的过程.... 2. 安装wepy命令工具,npm install wepy-cli -g ...
- centos 服务器 发开防火墙端口
一.概述 在服务器上手动安装了某个软件,需要通过外部访问该软件(有对外开放端口),但是此时访问不通,此时检查,发现是该端口没有在防火墙开放,因此外界访问不了该服务器上的该软件对外提供的功能,基于此,需 ...
- c语言中gets()的详细用法
gets从标准输入设备读字符串函数.可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出. 从stdin流中读取字符串,直至接受到换行符 ...
- WPF 键盘事件
private void Window_KeyDown(object sender, KeyEventArgs e) { if (e.KeyStates==Keyboard.GetKeyStates( ...
- 【原创】大叔经验分享(72)mysql时区
查看当前时区 > show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value ...
- $.ajax通用格式&&XMLHttpRequest对象属性和方法
$.ajax({ url: "", type: "POST", async: false, cache:false, //默认true data: {}, da ...