`

python类似java的反射操作

 
阅读更多

转自:http://guoshiguan.iteye.com/blog/308674

 

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下来看看

分享到:
评论

相关推荐

    Java反射机制-侯捷观点

    这种动态类型的行为使得Java在某种程度上具有了类似于Perl、Python和Ruby等动态语言的灵活性。 Java反射机制的核心是`java.lang.Class`类,它代表了在运行时的Java类和接口。每个Java类或接口都有一个对应的`Class`...

    候捷谈Java反射机制

    Java反射机制是Java语言的重要组成部分,它提供了强大的动态操作能力,使得Java应用程序能够在运行时动态地获取类的信息并操纵类的对象。虽然反射机制带来了灵活性和便利性,但也可能会影响程序的性能和安全性,因此...

    Java反射机制

    Java反射机制是Java编程语言中的一个重要特性,它赋予了程序在运行时检查和操作类、接口、字段和方法的能力。这种动态类型的行为使得Java在某种程度上具有了类似于Perl、Python和Ruby等动态语言的特性,虽然它本身是...

    C++_Java_Python2三个标准库的离线API

    Java API文档还涵盖了反射(Reflection)和注解(Annotation)等高级特性,帮助开发者深入理解Java的内在机制。 最后是Python2的API文档。Python2虽然已经停止更新,但在许多项目中仍被广泛使用。Python以其简洁...

    Slithering-Latte:Python 到 Java 编译器

    2. **数据类型**:Python有丰富的内置类型,如列表、元组、字典等,而Java的集合框架提供了类似的功能。编译器需要将Python的数据结构映射到对应的Java类型。 3. **函数和类**:Python的函数可以作为对象,支持闭包...

    Reflection反射.md

    - **性能开销**:反射操作通常比直接执行相应操作要慢,因为反射涉及到了解释过程。 - **安全问题**:如果错误地使用反射,可能会导致程序的不稳定性增加。 #### 四、反射相关的API介绍 反射机制的核心API主要包括...

    c++实现反射demo

    在许多面向对象的语言中,如Java、C#和Python,反射都被广泛应用。然而,C++作为一门静态类型语言,其标准库并没有内置反射功能。但通过一些技巧和第三方库,我们可以实现类似的功能。以下是对"C++实现反射demo"的...

    经典Python面试题之Python基础篇.docx

    - **Python3**: `range` 类似 Python2 的 `xrange`。 #### 20. 文件操作时 xreadlines 和 readlines 的区别? - **Python2**: `xreadlines` 类似 `readlines` 但返回迭代器。 - **Python3**: 已经移除 `xreadlines...

    用C++实现反射的例子

    通常,动态语言如Java和Python提供了内置的反射机制,但在静态类型的C++中,反射并不是标准库的一部分。不过,开发者们通过一些技巧,如宏预处理器(宏)和元编程,可以模拟实现类似的功能。本文将深入探讨如何使用...

    Java ppt 共享

    - **简单性**: 类似于C/C++,但更纯净,去除了复杂的特性如指针。 - **面向对象**: 纯粹的面向对象语言。 - **分布式**: 支持网络通信协议,能够通过URL访问网络资源。 - **健壮性**: 强调错误检查,避免了常见的...

    C++实现反射机制

    通常,动态语言如Java和Python内置了反射机制,但C++作为静态类型语言,其标准库并没有提供直接的支持。然而,通过一些技巧和第三方库,我们可以在C++中实现类似的功能。 ### C++反射基础 C++17引入了`std::any`和...

    Python-JShell用XSS获取一个JavaScriptshell

    JShell,全称为Java Shell,是Java 9及更高版本引入的一个交互式命令行工具,用于运行单行Java代码,类似于Python的交互式解释器。在安全测试中,我们可以利用JShell来执行JavaScript代码,尤其是在XSS攻击的场景下...

    编写Python脚本来获取mp3文件tag信息的教程

    import sys # 导入sys模块,使用sys.modules获取模块中的所有内容,类似反射的功能 from UserDict import UserDict # 这个表示从UserDict类中导入UserDict,类似于Java中的 import UserDict.UserDict   def ...

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

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

    Java进阶路线

    NIO (New I/O) 提供了非阻塞I/O操作的能力,而 JUC (Java Util Concurrency) 包含了一系列线程安全的数据结构和工具类。 **14. Lambda** Lambda 表达式允许你以更简洁的方式定义接口实现。这对于函数式编程风格的...

    python内建函数大全

    2. `classmethod()`:装饰器,表示这是一个类方法,可以在类或实例上调用,类似于Java中的`static`方法。 3. `compile(source, filename, mode[, flags[, dont_inherit]])`:将源代码编译为代码对象,可执行或求值。...

Global site tag (gtag.js) - Google Analytics