美文网首页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一样反射——动态实例化指定包

    在项目中需要在python中把某个包下面所有的类都实例化一个对象,把这些对象放到一个集合中,在java中可以通过反...

  • 安卓反射和动态代理的应用

    提纲 java反射基础 反射在Android中的应用 Java动态代理 动态代理在Android的应用 java反...

  • 反射机制案例

    在Java中,可以利用反射获取指定类型的公有/私有属性、方法,生成该类的实例对象,并调用该对象的方法。 以下反射相...

  • JNI回调更新UI的方法

    jni.c中 MainActivity中 c调用java实际是反射实例化,更新UI的时候不能实例化因为new的对象...

  • 第89节:Java中的反射技术

    第89节:Java中的反射技术 反射技术是动态的获取指定的类,和动态的调用类中的内容(没有类前就可以创建对象,将对...

  • 反射破坏单例模式(静态内部类)

    java反射,破坏单例模式 静态内部类 反射实例化单例

  • 反射

    正常方式:引入需要的“包.类”名称 ---> 通过new实例化 --->取得实例化对象反射方式:实例化对象--->...

  • Java反射与动态代理

    Java反射 Java反射机制可以动态地获取类的结构,动态地调用对象的方法,是java语言一个动态化的机制 特点:...

  • FactoryBean笔记

    情况下,Spring通过反射机制利用bean的class属性来指定实现类实例化bean. 在某些情况下,实例化be...

  • kotlin创建数组

    kotlin中数组不能像java一样,先声明int[] arr再去实例化arr = new int[length]...

网友评论

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

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