一:先上目录结构
二:各个文件的代码

# -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/4 16:42 from utils.message import send_msgs send_msgs('111')

# -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/4 16:42 MSG_LIST={ # 可以添加或注释 'utils.message.email.Email', 'utils.message.msg.Msg', }

# -*- 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)

# -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/4 17:05 # 相当于java中的接口 class Base(object): def send(self, msg): raise NotImplementedError('没有实现send方法')

# -*- 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

# -*- coding: utf-8 -*- # @Author : Felix Wang # @time : 2018/7/4 16:53 from .base import Base class Msg(Base): ''' 发送短信相关 ''' def __init__(self): ''' 短信相关数据初始化 ''' self.phonenum = '12121222122' def send(self, msg): print('Msg',msg) pass
这种方式代码和代码之间的耦合性很低,可扩展性很强,可以用在数据库操作上
操作的时候只要修改settings文件就行了
如果要扩展其他发送信息的方法只要按照格式在message目录下新建一个类,实现方法,然后添加到settings中
如果不用某种方法只要在settings中注释掉
这种方式在scrapy框架中用的非常多。