zoukankan      html  css  js  c++  java
  • 扩展性很强的python实现方式

    一:先上目录结构

    二:各个文件的代码

    # -*- coding: utf-8 -*-
    # @Author : Felix Wang
    # @time   : 2018/7/4 16:42
    
    from utils.message import send_msgs
    
    send_msgs('111')
    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 = '12121222122'
    
        def send(self, msg):
            print('Msg',msg)
            pass
    msg.py
    这种方式代码和代码之间的耦合性很低,可扩展性很强,可以用在数据库操作上
    操作的时候只要修改settings文件就行了
    如果要扩展其他发送信息的方法只要按照格式在message目录下新建一个类,实现方法,然后添加到settings中
    如果不用某种方法只要在settings中注释掉
    这种方式在scrapy框架中用的非常多。
  • 相关阅读:
    ucos信号量
    uC/OSII 常用函数参考手册
    GPS NMEA0183协议详解
    为sql server 表数据生成创建的储存过程(生成insert 脚本)
    安装SQL2008,提示删除SQL2005Express工具的解决方法
    intel hex 文件格式解密
    C语言:I/O
    C语言基础
    摆脱IDE进行时. . .
    对WinForm的App.config文件进行加密
  • 原文地址:https://www.cnblogs.com/felixwang2/p/9264332.html
Copyright © 2011-2022 走看看