zoukankan      html  css  js  c++  java
  • importlib模块与__import__详解

    importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同。

    通过下面示例说明,有如下一个工程目录:

    name = 'test'
    
    
    def getName():
        print(name)
    lib/test.py
    name = 'demo'
    
    
    def getName():
        print(name)
    demo.py

    一、importlib模块

    import importlib
    
    
    mName = 'lib.test'
    module = importlib.import_module(mName)
    module.getName()
    testimportlib.py

    importlib是python的一个标准库,通过导入importlib,调用import_module()方法,传入用户想要获取的模块对应的路径字符串,即可获取一个模块module,module可以调用这个test模块下的所有属性和方法。

    运行结果如下:

    二、__import__

    __import__是python的一个内置方法,直接调用__import__()即可获取一个模块。

    mName = 'demo'
    
    
    module = __import__(mName)
    module.getName()
    testimport.py

    运行结果如下:

    此时调用的是同目录下的demo模块,可顺利地获取这个模块,那么当不再同一个目录下呢?

    mName = 'lib.test'
    
    
    module = __import__(mName)
    module.getName()
    testimport.py修改为

    运行结果如下:

    出错提示表示,当前的模块'lib'没有getName()这个方法,因此没有正确获取到test模块。

    mName = 'lib.test'
    
    
    module = __import__(mName, fromlist=['test'])
    module.getName()
    继续修改testimport.py为

    运行结果如下:

    可见当加上__import__方法加上参数fromlist即可正确获取。

    有关importlib模块其他说明详见官方文档:https://docs.python.org/3.7/library/importlib.html?highlight=importlib#module-importlib.abc

  • 相关阅读:
    Java中使用CyclicBarrier
    Java中CountDownLatch使用初步
    设计模式简介
    Java中byte[]和char[]互相转换
    Java转换byte[]数组、Hex十六进制字符串
    TextBox自定义控件
    DataTrigger 绑定枚举
    WPF路径动画(动态逆向动画)
    github上传
    利用Canvas进行绘制XY坐标系
  • 原文地址:https://www.cnblogs.com/li-li/p/10658471.html
Copyright © 2011-2022 走看看