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框架中用的非常多。
  • 相关阅读:
    [iOS基础控件
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    [iOS 多线程 & 网络
    linux开发脚本自动部署及监控
  • 原文地址:https://www.cnblogs.com/felixwang2/p/9264332.html
Copyright © 2011-2022 走看看