zoukankan      html  css  js  c++  java
  • python动态导入模块

    目的是为了实现从配置文件切换运行时应该应用的模块,用C#的时候其实挺复杂的,因为是静态语言,所以要动态切换那就只有用反射了,python就容易多了,只要在运行的代码前动态import一下,就可以达到目的了

    假设有一个包“mypackage”,里面有三个module:md01.py, md02.py和md03.py,里面实现的是同一个方法

    def getstr():
        return "from md01/2/3"

    其中123因moudle不同而不同

    那么我们怎么用?

    from xml.dom import minidom
    
    
    if __name__=="__main__":
        #假定一个xml配置文件,读取moudle节点
        xml='''<?xml version="1.0"?><root><moudle>md03</moudle></root>'''
        p=minidom.parseString(xml)
        mdname=p.getElementsByTagName("moudle")[0].firstChild.data
        mymod=__import__("mypackage."+mdname,fromlist=["*"])#fromlist很重要
        print mymod.getstr()

    测试过程中,唯一忽略的就是__import__里面的fromlist参数,结果怎么也得不到模块,只能得到包,原因就是要在fromlist里面把可能参与导入的模块名要写进去,

    这是一个很赞的设计,假如你这个包非常庞大,但你只需要几个模块参与,你就把那几个模块名写进去就可以了

    假如导入的是自己的包里的模块,那么fromlist为空或者送该参数即可

  • 相关阅读:
    GOLANG之学习类库-mysql
    GOLANG学习之类库-goconfig
    PHP进程实现方式之死循环(一)
    PHPexcel之读取表格(三)
    PHPExcel之生成表格汇总列(二)
    GOLAND常用基本命令介绍
    PHPExcel之生成xlsx并下载(一)
    nginx之版本升级方法一
    php linux yaml 的安装和使用
    【Go语言学习笔记】Go的defer
  • 原文地址:https://www.cnblogs.com/walkerwang/p/2118781.html
Copyright © 2011-2022 走看看