内容字号:默认大号超大号

段落设置:段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

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

2018-04-16 17:25 出处:清屏网 人气: 评论(0

在项目中需要在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

分享给小伙伴们:
本文标签: javapython

相关文章

发表评论愿您的每句评论,都能给大家的生活添色彩,带来共鸣,带来思索,带来快乐。

CopyRight © 2015-2016 QingPingShan.com , All Rights Reserved.

清屏网 版权所有 豫ICP备15026204号