`

python 根据类名生成实例(相当于java的Class.forName)

阅读更多

python是一个脚本语言,它不象java一样有一个专门的包来处理反射。以 下是我们来看看python是怎么做到类似java一样的反射功能的。我在网上搜了一下,因为在网上没有很明确的文章说要怎么做,所以,我写了这篇,希望 新手不要向我一样走弯路,因为是新手,所以,我在这里没能考虑到异常的处理。

-、动态加载类

说到动态的加载类,那就不得不说,动态的加态模块。因为只能成功的加模了模块才能加载到类。我们可以用,以下的代码来动态的加载类

Python代码
  1. #modulePath是模块文件的路径+模块的文件名。
  2. aMod = sys.modules[modulePath]

当我们动态的加载了这个模块后,我们就可以从这个模块中取得你要的类了,感觉上这个方法有点像java中从类中反射出方法。下以的代码可以

Python代码
aClass= getattr(aMod, className)

二、动态实例化类

得到了class对象之后,在python就可以很方便的得到他的对像,以下这代码

Python代码 obj = new.instance(aClass)


三、得到对象、类或模块中的所有属性方法

在java的反射中我们可以得到对象中的所有属性和方法,在python中,因为是脚本语言,所以我们要得到这个些属性方法更加的方便,我们可以用以下的代码获得类,对象,模块中的所有的属性的名称

Python代码
dir(aClass)

我们得到这些属性的名称后,可以用上面得到class 的方法来获得这个对象里的所有属性

四、动态运行方法

动态的运行方法,我们也非常的方便,因为python是脚本语言,感觉起来很象javascript的方式来调用方法。

Python代码
apply(objFunc,arrArgs)

代码中objFunc是用getAttr从实例化后的对象中取得到function,而arrArgs是我们的参数,和javascript一样,他是数组一样的对象。

有了这些方法,我们就可以做和java反射一样做的事了,我在网上找到了一个模块,小改了一下,使得用这个模块可以很方便的用类名实例化一个实例和运行这个实例中的方法,如果大家需要可以down下来看看

 

参考地址:http://www.chainlt.com/?p=686

分享到:
评论

相关推荐

    浅谈java中类名.class, class.forName(), getClass()的区别

    下面小编就为大家带来一篇浅谈java中类名.class, class.forName(), getClass()的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Python中动态创建类实例的方法

    在Java中我们可以通过反射来根据类名创建类实例,那么在Python我们怎么实现类似功能呢?其实在Python有一个builtin函数import,我们可以使用这个函数来在运行时动态加载一些模块

    详解C# 利用反射根据类名创建类的实例对象

    “反射”其实就是利用程序集的元数据信息。 反射可以有很多方法,编写程序时请先导入 System.Reflection 命名... // 创建类的实例 2、若要反射当前项目中的类(即当前项目已经引用它了)可以为: Assembly assembly

    通过类名获取类的实例对象

    通过类的名称就可以找到类的对应实例对象,和JAVA中的反射差不多,使用时可能会应为map对象导致错误,正在改正中

    易语言模块动态类名.rar

    易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar 易语言模块动态类名.rar

    php根据字符串类名生成动态对象类.zip

    php根据字符串类名 动态生成对象 经常的需求是,由其他地方获取到一个类的名称,需要生成该类的对象。 可以给目标类定义一个static的方法生成该对象的实例,然后通过call_user_func或call_user_func_array...

    chrome F12 根据类名找CSS及动画.zip

    chrome F12 根据类名找CSS及动画.zip

    Java程序设计基础:使用命令行方式开发Java程序.pptx

    javac Welcome.java (得到Welcome.class文件) java Welcome (省略.class) 程序名 Welcome.java 保存位置 d:\javacode 在控制台输出“Welcom to Java!” 3.执行Java程序 1.用记事本编写Java程序 命令行状态下编写Java...

    编程爱好者必备的类名查询工具Delphi源码..rar

    编程爱好者必备的类名查询工具Delphi源码..rar

    Free Spire.Doc for Java 3.9.0

    Free Spire.Doc for Java 3.9.0,不想去官网注册的可以下载使用

    php根据字符串类名生成动态对象类

    php根据字符串类名 动态生成对象 经常的需求是,由其他地方获取到一个类的名称,需要生成该类的对象。 可以给目标类定义一个static的方法生成该对象的实例,然后通过call_user_func或call_user_func_array调用该...

    java的主题类名

    java的主题类名

    基于Python实现图像分类项目源码+文档说明.zip

    基于Python实现图像分类项目源码+文档说明.zip使用方式:1.往 /data/train 和 /data/val 两个文件夹里从0开始创建并命名文件夹名,有多少个分类就建多少个文件夹,文件夹名即分类名序号.2.往各个文件夹内放对应类的...

    Java常用的反射方法

    2.2 类名.class 2.3 实例对象.getClass() 2.4 总结 3. 反射获取属性变量 3.1 获取所有public修饰符的成员变量 3.2 获取指定字段并赋值 3.3 获取所有的成员变量(不考虑修饰符) 3.4 获取私有的变量(利用暴力...

    java反射配置文件实现

    Constructor con=c.getDeclaredConstructor(String.class,int.class); // 反映此 Class 对象所表示的类或接口的指定构造方法。 /* 跟 Student类中的两个参数的构造方法对应 * public Student(String name, int ...

    Java的类名与文件名必须一致.txt

    1.Java保存的文件名必须与类名一致; 2.如果文件中只有一个类,文件名必须与类名一致; 3.一个Java文件中只能有一个public类; 4.如果文件中不止一个类,文件名必须与public类名一致; 5.如果文件中不止一个类,...

    个人java总结笔记

    3:类名.Class(); 通过Class 对象获得类的指定成员,构造方法 构造方法: Constructor 成员方法: Method 成员变量:Field Class对象.getConstructor(参数类型的Class对象 如 String.class); 获得指定参数的公共...

    Java——反射方法总结

    * 通过类名.class方法,获取对应的.class对象,通常用于方法的参数类型 * * Class 类对象.getClass(); * 通过类对象获取对应.class的class类对象,方法参数或者说数据类型判断 */ package

    Python面向对象之类和对象实例详解

    class Turtle:#python 中类名约定以大写字母开头 '''关于类的简单例子。。。''' #属性 == 类变量 color ="green" weight="10kg" legs=4 shell=True mouth='big' #方法 def climb(self):

Global site tag (gtag.js) - Google Analytics