美文网首页python基础程序员Python那些事儿
锱铢必较:在python中像java一样反射——动态实例化指定包

锱铢必较:在python中像java一样反射——动态实例化指定包

作者: 大神带我来搬砖 | 来源:发表于2018-04-10 18:43 被阅读120次

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

    相关文章

      网友评论

      本文标题:锱铢必较:在python中像java一样反射——动态实例化指定包

      本文链接:https://www.haomeiwen.com/subject/eqwnhftx.html