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为空或者送该参数即可

  • 相关阅读:
    操作系统(一) 操作系统的概念
    数据结构(六) 排序
    数据结构(五) 查找和哈希表
    数据结构(三) 树和二叉树,以及Huffman树
    数据库简述(以MySQL为例)
    Java中的UDP应用
    Java线程池应用
    Java定时器应用
    JavaSE项目之聊天室swing版
    用LinkedList集合演示栈和队列的操作
  • 原文地址:https://www.cnblogs.com/walkerwang/p/2118781.html
Copyright © 2011-2022 走看看