python的动态导入module和class

动态导入module

比如说我想引入一个文件夹下的所有".py"文件结尾的文件,但是不需要引入_init_.py。

首先,我们通过python的字符串处理过程获取到一个相关的字符串数组。

源码如下:

import os

n=[]
dir1=os.listdir(‘E:\\webtest\\test_case‘)
for a in dir1:
    m=a.find("start")
    if m!=-1:
        test=a.split(‘.‘)[1]
        if test==‘py‘:
            test1=a.split(‘.‘)[0]
            n.append(test1)

这个时候n输出是一个字符串形式的列表:

n=[‘start_01‘, ‘start_02‘,
‘start_03‘, ‘start_04‘]

这个时候,如果想动态导入的话,使用_import_()方法,关于这个方法的使用,参考官方指导文档即可。

源码如下:

for i in range(0,m):
    a="test_case"+"."+n[i]
    load=__import__(a)

通过循环的方式我们依次导入测试需要的module.

动态导入class

我们test_case文件夹地下,我们需要动态获取start_01到start_04文件夹底下,对应的class,这一块为了调用方便,我们文件名和类名保持一致。

思想如下:首先我们获取类的前提,是先获取module,刚才只是动态导入module,并没有获取导入module.

获取的源码如下:

test2=[]
for i in range(0,m):
    a="test_case"+"."+n[i]
    load=__import__(a)
    a=getattr(load,n[i])#获取module
    b=getattr(a,n[i])#获取class
    test2.append(b)

这一段源码就完成动态获取类的过程。

关于getattr方法的使用,具体的要参考官网文档。

时间: 2024-10-30 21:07:37

python的动态导入module和class的相关文章

python中动态导入模块

如果导入的模块不存在,Python解释器会报 ImportError 错误: >>> import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了Strin

Python importlib(动态导入模块)

使用 Python importlib(动态导入模块) 可以将字符串型的模块名导入 示例: import importlib module = 'module name' # 字符串型模块名 test = importlib.import_module(module) # 导入模块 print(test.Class().attr) # 打印 Class 类的 attr 属性 原文地址:https://www.cnblogs.com/dbf-/p/10667248.html

python 反射 动态导入模块 类attr属性

1.反射 hasattr getattr delattr setattr 优点:事先定义好接口,接口只有在被完成后才能真正执行,这实现了即插即用,这其实是一种“后期绑定”,即先定义好接口, 然后是再去实现具体的功能 print(hasattr(p, 'age')) # True 是否有属性 判断 print(getattr(p, 'name', '没有找到该参数')) # get属性值 print(getattr(p, 'name1', 'False')) # False setattr(p,

Python动态导入模块

如果导入的模块不存在,Python解释器会报 ImportError 错误: >>> import something Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named something 有的时候,两个不同的模块提供了相同的功能,比如 StringIO 和 cStringIO 都提供了Strin

python模块之os_sys_动态导入_包

#!/usr/bin/env python # coding:utf-8 import os print(os.getcwd()) #获取当前工作目录,即当前python脚本工作的目录路径 # os.chdir("dirname") #改变当前脚本工作目录:相当于shell下cd print(os.curdir) # 返回当前目录: ('.') 所以一个点也是代表当前目录的意思 print(os.pardir) # 获取当前目录的父目录字符串名:('..') # print(os.ma

python模块以及导入出现ImportError: No module named &#39;xxx&#39;问题

python模块以及导入出现ImportError: No module named 'xxx'问题 python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模 块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用 如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比 如在a.py中使用b.py:  import b 但是如果要import一个不同目录的文件(例如b.py)该怎么做

python模块以及导入出现ImportError: No module named ‘xxx’问题

首先来说,这个问题是我用pycharm4.5进行开发的,我在做python的模块与函数单元的例子. 需要建一个模块名字叫myModule 于是我就写了一个,挺简单的 def arithmetic(x=1, y=1, operator="+"): result={ "+":x+y, "-":x-y, "*":x*y, "/":x/y } return result.get(operator) class My

Python 动态导入模块

动态导入模块 目录结构: zhangsandeMacBook-Air:1110 zhangsan$ tree . . ├── lib │   └── aa.py ├── test1.py lib目录下有一个aa.py文件,其中C类中有一个属性name: class C: def __init__(self): self.name = 'zhangsan' 在test1.py文件中需要动态导入aa这个模块有两种办法: 第一种: lib = __import__('lib.aa') obj = li

Python随心记--反射、动态导入模块

hasatttr(object,name) #检测对象中是否存在name属性getattr(object,name,delault = Null)setattr(object,x,True)delattr(object,x) #删除属性 class BlackMedium: feture = 'Ugly' def __init__(self,name,addr): self.name = name self.addr = addr def sell_hourse(self): print('[%