python反射实现django中间件类似的配置小demo

1、创建一个python包

 2、包里面每个文件内容

<1> email.py里面

class Email(object):

    def send(self, content):
        print("邮件消息:{}".format(content))


<2> qq.py里面

class QQ(object):

    def send(self, content):
        print("QQ消息:{}".format(content))


<3> we_chat.py里面

class WeChat(object):

    def send(self, content):
        print("微信消息:{}".format(content))

3、包的同级目录增加配置文件、和增加主程序py文件

<1> reflect_settings.py 文件里面

# 类似django中间件的配置,注释了就不再生效
SEND_MESSAGE_SETTINGS = [
    "reflect2.we_chat.WeChat",
    "reflect2.qq.QQ",
    "reflect2.email.Email"
]

<2> reflect_send_message.py 文件里面


import importlib
from reflect_settings import SEND_MESSAGE_SETTINGS


# 模拟群发消息
def send_message(content):
    for i in SEND_MESSAGE_SETTINGS:
        path, cla = i.rsplit('.', 1)
        path = importlib.import_module(path)
        # path = __import__(path, fromlist=(cla,))
        class_obj = getattr(path, cla)
        instance_obj = class_obj()
        instance_obj.send(content)


if __name__ == '__main__':
    send_message("今天发奖金!")

打印结果:

4、如果再加钉钉发消息,直接再包里面创建dingding.py 。同时也实现send方法,然后在配置文件加一行配置

SEND_MESSAGE_SETTINGS = [
    "reflect2.we_chat.WeChat",
    "reflect2.qq.QQ",
    "reflect2.email.Email",
    "reflect2.dingding.DingDing",
]

5、运行 reflect_send_message.py 文件

效果:

 这样就实现了,动态的去调用对象方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值