开放封闭原则

如已知某些配置会在之后的运行中可能被多次修改,则:

 

  项目中业务代码不允许修改

  配置文件可以允许修改

 

示例:

projict:

  db:

    mysql.py

    sqlserver.py

  app.py

  settings.py

  start.py

db:

#mysql.py

class MySQLHelper(object):

    def fetchone(self):
        """
        链接MySQL,获取一条数据
        :return: 
        """
        print('MySQL.fetchone')

#sqlserver.py

class SqlServerHelper(object):
    def fetchone(self):
        """
        链接SQLServer,获取一条数据
        :return: 
        """
        print('SQLServer.fetchone')

  

settings:

# DB_PATH = "db.mysql.MySQLHelper"
DB_PATH = "db.sqlserver.SqlServerHelper"

 

apps:

from projiect.settings import DB_PATH
def func():
    # 导入文件
    # 反射
    # DB_PATH = "db.mysql.MySQLHelper"
    module_path,cls_name = DB_PATH.rsplit('.',maxsplit=1)

    # 以字符串的形式导入模块
    # from db import mysql
    import importlib
    module_obj = importlib.import_module(module_path)

    # 去模块中导入类
    cls = getattr(module_obj,cls_name)

    # 类实例化
    obj = cls()
    obj.fetchone()


if __name__ == '__main__':
    func()

  

 

posted @ 2017-12-20 21:23  百连  阅读(193)  评论(0编辑  收藏  举报