zoukankan      html  css  js  c++  java
  • python_反射:动态导入模块

    官方推荐方法:

    test_mod.py

    def hi():
        print('Hi')

    test.py

    import importlib
    
    q = importlib.import_module('test_mod') #动态导入模块
    q.hi()

    如果导入文件夹下面的模块引号内可以这样:目录.模块名

      q = importlib.import_module('app.test_mod') #动态导入模块

    调用的模块:lib文件夹下面的commons.py

    def f1():
        print('函数1')
    
    def f2():
        print('函数2')
    
    def f3():
        print('函数3')

    反射:根据用户输入字符导入模块并调用模块中的方法

    import os
    
    yhf = 'lib'
    
    def wdc():
        inp = input('请输入(模块名/方法名):')
        # 将输入的字符串根据‘/’分割,并分别赋值给m和f
        try:
            m,f = inp.split('/')
            #   检测是要导入的模块是否存在
        except Exception:
            print('输入格式不正确!')
        else:
            if os.path.exists(yhf + '/' + m + '.py'):
    
                # 根据字符串导入模块,若导入文件夹下面的模块,需要后面添加fromlist=True
                obj = __import__(yhf + '.' + m, fromlist=True)
                # 检测模块中是否存在成员(模块,成员名),返回 T/F
                if hasattr(obj, f):
                    #   根据字符串的形式去对象(模块)中寻找成员。返回成员名
                    func = getattr(obj, f)  # (模块,用户输入的字符串)
                    # 执行方法
                    func()
                else:
                    # 当方法名输入错误时
                    print('没有找到该方法!')
            else:
                print('不存在此模块!')
    
    
    wdc()

    执行结果:

    四个方法:

      delattr()  根据字符串删除方法

      setattr()  根据字符串创建方法

      hasattr()  根据字符串检测方法是否存在

      getattr()  根据字符串寻找方法

  • 相关阅读:
    c# 动态加载工具栏按钮代码
    根据结果集处理工作事务c#源码
    关于升级后药库中报表需要重新设置的问题
    vs2005打开工程后退出
    把照片写入到DataTable
    关于导入最新住院管理后界面控件乱的问题
    django实战2运维日常维护统计
    ip_conntrack_netbios_n 报错
    django_book学习笔记7django常用方法总结
    python模块整理14re模版
  • 原文地址:https://www.cnblogs.com/wangdianchao/p/11710035.html
Copyright © 2011-2022 走看看