• Python动态导入模块、类、属性


    简单示例

    文件结构
    a #文件夹
     │a.py
    b #文件夹
     │b.py
     ├─c#文件夹
      │c.py
    

    c.py 

    args = {'a':1}
    class C:
        
        def c(self):
            pass

    a.py

    import importlib
    params = importlib.import_module('b.c.c') #绝对导入
    params_ = importlib.import_module('.c.c',package='b') #相对导入
    # 对象中取出需要的对象
    params.args #取出变量
    params.C  #取出class C
    params.C.c  #取出class C 中的c 方法
    一个实际的示例
    从url传参中获取参数,动态导入模块
    from flask import Flask,request
    import importlib
    import unittest

    app = Flask(__name__)
    @app.route('/testcase/')
    def testcase():
    requests = request.args # 获取所有接收到的参数。
    print(requests.get('file'))
    filename = requests.get('file')
    print(requests.get('class'))
    clasname = requests.get('class')
    print(requests.get('func'))
    funcname = requests.get('func')
    moud,clas = dynamicimport(filename,clasname)

    # # 构造测试集
    suite = unittest.TestSuite()
    suite.addTest(clas(funcname))
    # 执行测试
    runner = unittest.TextTestRunner()
    runner.run(suite)
    return '<h1>Hello World!</h1>'


    def dynamicimport(filename,clasname):
    # 动态导入包
    moud = importlib.import_module('testcase.%s' % filename, package='testcase')
    # 实例化类
    clas = getattr(moud, clasname)

    ## 获取类下的具体属性
    # test = getattr(clas(), funcname)
    ## 遍历
    # atts = dir(clas) # 获得case属性
    # for att in atts:
    # if 'test_' in att:
    # print('%s running......' % att)
    # test = getattr(clas(), att)() # 运行含有‘test_’的方法
    # print('%s is complete' % att)
    return moud,clas

    if __name__ == '__main__':
    app.run(host='127.0.0.1',port=8080,debug=True)
     
     
  • 相关阅读:
    <转> Lua使用心得(2)
    (转) Lua使用心得一 LUA和VC整合
    Highcharts 的实际实践一
    Springmvc4 com/fasterxml/jackson/core/JsonProcessingException
    如何在其他电脑上运行VS2005编译的DEBUG版应用程序
    [转]深入分析 Java 中的中文编码问题
    自动白平衡技术(WhiteBalance)(转自Harri的blog)
    沉思录(1)——EricKing工作的一个月
    图像处理一(BMP的格式说明)
    ios检查版本更新
  • 原文地址:https://www.cnblogs.com/-wenli/p/13873668.html
Copyright © 2020-2023  润新知