python3-import_module方法和插拔式设计原理

一、import_module方法

import_module方法用来通过形如'aaa.bbb.ccc'的路径字符串,导入指定的模块:

import importlib
ret = importlib.import_module('myfile.b')  # 等价于:from myfile import b
print(ret)

注意:import_module只能导入到模块层次(即某一py文件),导入模块内成员会报错。

二、插拔式设计原理

django自带的配置文件十分好用,需要的功能在配置文件中注册后即可生效,不需要就注释或删除掉,会立刻失效。而它背后的原理也十分简单,通过import_module方法就能够很方便的实现:

在模块中,写入类,实现各种功能。

settings.py配置文件中,注册这些类:

LIST = [
    # 配置项,不需要就注释掉,需要就取消注释
    # 也可以自己写入
    'notify.email.Email',
    'notify.qq.QQ',
    'notify.wechat.Wechat',
]

在包的__init__.py文件中:

import settings
import importlib


def send_all(content):
    for path_str in settings.LIST:
        # 获取模块路径和类名
        module_path, class_name = path_str.rsplit('.',maxsplit=1)
        # 模块路径:module_path = 'notify.email';类名:class_name = 'Email'
        # 1 利用字符串导入模块
        module = importlib.import_module(module_path)  # from LIST import email
        # 2 利用反射获取类名
        cls = getattr(module,class_name)  # Email、QQ、Wechat
        # 3 生成类的对象
        obj = cls()
        # 4 利用鸭子类型的特点直接调用对象方法
        obj.方法1(参数)
        obj.方法2(参数)
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花_城

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值