Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2339244
  • 博文数量: 321
  • 博客积分: 3440
  • 博客等级: 中校
  • 技术积分: 2992
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-24 09:08
个人简介

我就在这里

文章分类

全部博文(321)

文章存档

2015年(9)

2014年(84)

2013年(101)

2012年(25)

2011年(29)

2010年(21)

2009年(6)

2008年(23)

2007年(23)

分类: Python/Ruby

2013-02-27 14:46:04

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

-、动态加载类

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

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

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

Python代码  收藏代码
  1. aClass= getattr(aMod, className)  


二、动态实例化类

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

Python代码  收藏代码
  1. obj = new.instance(aClass)  


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

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

Python代码  收藏代码
  1. dir(aClass)  

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


四、动态运行方法

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

Python代码  收藏代码
  1. apply(objFunc,arrArgs)  

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

 

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


阅读(2624) | 评论(0) | 转发(0) |
0

上一篇:PB通过API实现目录遍历

下一篇:python 反射

给主人留下些什么吧!~~