一种编程思想——利用settings文件实现功能的增减
一. 正常函数版本的思路
1. notify.py
def wechat(content): print('微信通知:%s'%content) def qq(content): print('qq通知:%s'%content) def email(content): print('邮箱通知:%s'%content)
2. start.py
from notify import * def send_all(content): wechat(content) qq(content) email(content) if __name__ == '__main__': send_all('这是消息通知')
二. 模仿django的settings.py中多处利用指定字符串到类名的形式, 就可以通过字符串获取并执行相应的类中的方法和功能.
1. 目录结构
# 在一个包中有好几个模块 notify/ # 包 ├── __init__.py ├── email.py ├── qq.py └── wechat.py ├── settings.py └── start.py
2. notify
2-1. __init__.py
import settings import importlib def send_all(content): for path_str in settings.NOTIFY_LIST: # 'notify.email.Email' module_path, class_name = path_str.rsplit('.', maxsplit=1) # module_path = 'notify.email' class_name = 'Email' # 1 利用字符串导入模块 module = importlib.import_module(module_path) # from notify import email # 2 利用反射获取类名 cls = getattr(module, class_name) # Email、QQ、Wechat # 3 生成类的对象 obj = cls() # 4 利用鸭子类型直接调用send方法 obj.send(content)
2-2. email.py
class Email(object): def __init__(self): pass # 发送邮箱需要做的前期准备工作 def send(self, content): print('邮箱通知:%s' % content)
2-3. qq.py
class QQ(object): def __init__(self): pass # 发送qq需要做的前期准备工作 def send(self, content): print('QQ通知:%s' % content)
2-4. wechat.py
class WeChat(object): def __init__(self): pass # 发送微信需要做的前期准备工作 def send(self, content): print('微信通知: %s' % content)
3. settings.py
# 配置文件中以字符串的格式保存需要导入的内容 NOTIFY_LIST = [ 'notify.email.Email', 'notify.qq.QQ', 'notify.wechat.WeChat', # 'notify.msg.Msg', ]
4. start.py
# 用户需要发送消息通知只需要导入import notify即可操作使用实现一键发送消息 import notify notify.send_all('这是消息通知')
5. 中心思想总结
1 2 3 4 5 6 | 利用了面向对象以及面向对象的多态性(鸭子类型), 再通过定制配置文件并存放不同功能类的字符串路径, 接着使用导入包就是导入__init__.py文件的特性, 在包中定义一个方法, 方法中用importlib就轻松的导入了需要的模块. 再拿到这个模板通过获取的字符串路径最后一个类的字符串进行反射就实现了可以同时进行多个类中功能的集合. 合理的运用这种思想, 就可以只修改settings.py中的路径地址, 并合理的增添 或者 关闭某些功能. 重要的是关闭只需要注释即可. |
本文来自博客园,作者:wellplayed,转载请注明原文链接:https://www.cnblogs.com/wellplayed/p/17796528.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix