| by 鲍 建伟 | No comments

python获取导入包的全部类并执行同名方法

故事的来源是这样,朋友被这个问题卡了一下午,跟我沟通了半天,还在纸上画图我都没听明白,最终我还是盲写代码弄出来的。

总结出来这部分的需求就是这样:

1.从外部导入一个包
2.获取包内全部class,并循环初始化成实例
3.循环从各个实例执行同名方法(意思就是外部包可能有一万个class,但是每个class都可能有同名方法,循环执行同名方法,如果没有方法输出报错信息)

下面是代码Demo:

# name:import_class.py
# 此为导入的外部包
class test_1(object):
    def test_1_1(self):
        print(1)

class test_2(object):
    def test_1_1(self):
        print(2)

class test_3(object):
    def test_1_1(self):
        print(3)

class test_4(object):
    def test_1_2(self):
        print(4)
#name:init_instance.py
import import_class as IC
import inspect

# 用list存储获取到的全部类
test_list = []

# 在外部包找到所有的类
for name, obj in inspect.getmembers(IC):
    if inspect.isclass(obj):
        test_list.append(obj)

# 输出list里面是导入包的全部的class
print(test_list)

# 循环初始化
instance_list = []
for item in test_list:
    instance_list.append(item())
    print('这个item的clss是:' + str(type(item())))

# 循环执行同名方法
for item in instance_list:
    try:
        item.test_1_1()
    except:
        print(str(item) + '类里面没有test_1_1()方法')

完毕,看来还是沟通很重要啊,哈哈!

冲冲冲!

发表评论