开放封闭原则
如已知某些配置会在之后的运行中可能被多次修改,则:
项目中业务代码不允许修改
配置文件可以允许修改
示例:
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()