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 文件
效果:
这样就实现了,动态的去调用对象方法