在python中像java一样反射——动态实例化指定包下面所有的类

在项目中需要在python中把某个包下面所有的类都实例化一个对象,把这些对象放到一个集合中,在java中可以通过反射机制来实现,先获得这个包下面所有的Class,然后利用class的构造函数来实例化对象 python则需要pkgutil,importlib,inspect模块的帮助 假设要操作的python包是bar,代码如下

import pkgutil
import importlib
from inspect import getmembers, isclass

import bar

result=[]
for importer, name, ispkg in pkgutil.walk_packages(bar.__path__, "%s." % bar.__name__):
    if not ispkg:
        module=importlib.import_module(name)
        object_list = [value() for (_, value) in getmembers(module) if isclass(value)]
        result.extend(object_list)

for o in result:
    print(o)

pkgutil用来遍历package和module,用importlib来import module,在module中查找是class的member,调用class来实例化

代码地址是https://github.com/kabike/python-reflect

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老马说编程

计算机程序的思维逻辑 (12) - 函数调用的基本原理

栈 上节我们介绍了函数的基本概念,在最后我们提到了一个系统异常java.lang.StackOverflowError,栈溢出错误,要理解这个错误,我们需要理...

21410
来自专栏Celebi的专栏

C/C++ 学习笔记七(内存管理)

工作中经常使用到C/C++,为对C有个比较深刻的了解,重新拾起学习C的任务。在看书的同时,记录下思考的过程,也记录下重要的知识点。

2880
来自专栏Kevin-ZhangCG

[ Java面试题 ]基础篇之二

1685
来自专栏小狼的世界

This关键字的一些更新的理解

this是Javascript中一个非常重要的关键字,正确的使用this能够使我们的程序效率得到提升。之前,对于this的认识还存在一些误区,今天看了一篇文章之...

765
来自专栏乐百川的学习频道

Python学习笔记 输入输出

str和repr内置函数 在介绍Python的输入输出之前,我们先来介绍两个内置函数,str()和repr(),它们都用来输出对象的字符串形式。不过它们之间有一...

3328
来自专栏zlmai的专栏

C++中关于几种输入方法的总结

C++中有很多关于输入的函数,比如cin、cin.get()、cin.getline()、getline()、gets()等等,很容易搞混,下面分别总结下,欢迎...

2395
来自专栏Python小屋

使用Python字符串的编码与解码方法实现信息加解密

代码思路很简单,字符串的encode()方法可以将其编码为字节串,在生成的字节串中插入干扰字节后无法正常解码,要想还原信息,必须清楚干扰字节的位置并删除后再使用...

3334
来自专栏思考的代码世界

Python编程从入门到实践之安装和数据类型|第0天

变量名=赋值的值,例如change是变量名,Hello SenLin Chen!是赋值的值。这样变量change的值就是:Hello SenLin Chen!;

51514
来自专栏用户2442861的专栏

再谈python中的多态

以前写过一篇文章讲了一下python中的多态,最后得出结论python不支持多态,随着对python理解得加深,对python中得多态又有了一些看法。

6011
来自专栏LuckQI

学习Java基础知识,打通面试关七

941

扫码关注云+社区

领取腾讯云代金券