由django中间件引发的编程思想
创建一个文件夹,把一个个功能写成一个个py文件,假如我们写一个消息通知,让qq, 微信,邮箱都能接收到,qq, 微信,邮箱就是一个个功能
aapp02文件夹下的qq.py
class Qq(object):
def __init__(self):
pass
def send(self,content):
print(f'QQ通知:{content}')
aapp02文件夹下的wechat.py
class Wechat(object):
def __init__(self):
pass
def send(self,content):
print(f'微信通知:{content}')
aapp02文件夹下的email.py
class Email(object):
def __init__(self):
pass
def send(self,content):
print(f'邮件通知:{content}')
aapp02文件夹下的__init__.py
import settings
import importlib
def send_all(content):
for path_str in settings.APP02_LIST:
module_path ,class_name = path_str.rsplit('.',maxsplit=1)
module = importlib.import_module((module_path)) #1 利用字符串导入模块
cls = getattr(module,class_name) # 2 利用反射获取类名
obj =cls() # 3 生成类的对象
obj.send(content) # 4 利用鸭子类型直接调用send方法
settings.py:
APP02_LIST = [
'aapp02.email.Email',
'aapp02.qq.Qq',
'aapp02.wechat.Wechat',
]
start.py
import aapp02
aapp02.send_all('下课了')
当我们添加或者删除一个功能的时候,只需要在seetings里面添加或注释掉就可以了.