`

python反射

阅读更多

python反射:

class PP():  
    def __init__(self,name):  
        self.name=name  
          
    def hi(self):  
        print 'hi',self.name  
        
p=PP('naughty')  
#p.hi()  
#f=hasattr(p,'name')  
print getattr(p,'name') #反射属性
fuc = getattr(p,'hi') #反射方法
apply(fuc) #调用方法
print callable(getattr(p,'hi'))#方法是否可调用
pp = globals()['PP']#获取class
ppp = pp('dirk.zhang')#实例化对象
ppp.hi()
print '---'

 

 

以下转个帖子

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

http://blog.csdn.net/imzoer/article/details/8638094

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

分享到:
评论

相关推荐

    Python反射用法实例简析

    本文实例讲述了Python反射用法。分享给大家供大家参考,具体如下: class Person: def __init__(self): self.name = "zjgtan" def getName(self): return self.name 反射的简单含义: 通过类名获得类的实例...

    Python反射和内置方法重写操作详解

    本文实例讲述了Python反射和内置方法重写操作。分享给大家供大家参考,具体如下: isinstance和issubclass isinstance(obj,cls)检查是否obj是否是类 cls 的对象,类似 type() class Foo(object): pass obj = Foo()...

    学习python第十一天 反射、动态加载模块.pdf

    Python反射机制和动态加载模块 Python语言中有一个非常重要的功能称为反射机制(Reflection),它允许程序在运行时访问、检测和修改自身的状态或行为,这种能力也被称为自省(Introspection)。在Python中,反射...

    Python反射的用法实例分析

    本文实例讲述了Python反射的用法。分享给大家供大家参考,具体如下: 在做程序开发中,我们常常会遇到这样的需求:需要执行对象里的某个方法,或需要调用对象中的某个变量,但是由于种种原因我们无法确定这个方法或...

    简单了解python反射机制的一些知识

    反射 反射机制就是在运行时,动态的确定对象的类型,并可以通过字符串调用对象属性、方法、导入模块,是一种基于...在python中支持反射机制的函数有getattr()、setattr()、delattr()、exec()、eval()、

    Python-Python实现反射式SO注入技术

    了解了Python反射式SO注入的基本原理后,我们可以看到`SnakeEater-master`这个压缩包可能是一个包含示例代码或者工具的项目,用于演示或研究如何实现和防范这种攻击。通过深入研究该项目的源代码,我们可以更深入地...

    python3 反射的四种基本方法解析

    这四个基本方法——getattr()、hasattr()、setattr() 和 delattr(),构成了Python反射的核心,使得代码更加灵活和动态。下面我们将逐一详细介绍这些方法。 1. getattr() 方法 getattr() 方法用于获取对象的属性或...

    Python应用测试框架(整合WinAPI&WatiN;&Dll;反射&Linux;等)

    IronPython-2.7.2.1.msi; (或以上) 1)引用PlugsRoot.dll,动态dll插件开发,放到Plugs目录下即可加载,类似Eclipse插件: using PlugsRoot; [PluginInfo("动态插件名", "1.0.0.1", "作者", "分组", false)] ...

    Python3.6简单反射操作示例

    Python的反射机制是一种动态类型特性,它允许程序在运行时检查和修改自身的结构。在Python中,这通常通过内置函数如`getattr()`、`hasattr()`和`setattr()`来实现。下面将详细解释这些概念、原理以及如何在Python3.6...

    narcissus_python_源码.zip

    Python语言本身就具有强大的反射能力,能够动态地检查、修改和执行自身的代码,这使得"narcissus_python_源码"项目很可能是一个关于Python反射特性的实践或扩展。 在深入源码之前,我们先了解Python的反射机制。...

    浅谈Python反射 & 单例模式

     – python中的一切事物都是对象(都可以使用反射)  四个可以实现自省的函数:  – getattr() 获取属性  – hasattr() 判断对象中是或否拥有特定的值  – setattr() 设置属性  – delattr(obj,’gender’)...

    python 注入漏洞.md

    4. **Python反射机制的应用**: - 利用Python内置的反射机制来逐步寻找`os.popen`的调用路径。 - 例如,通过`.__class__`来确定变量的类型;`.__mro__`来获取类继承的基类元组;`. __subclasses__`来获取子类列表...

    Python中反射和描述器总结

    在Python中,能够通过一个对象,找出type、class、attribute或者method的能力,成为反射。 函数与方法 内建函数: getattr(object,name[,degault]) 通过name返回object的属性值,当属性不存在,将使用default返回,...

    Python动态导入模块和反射机制详解

    Python动态导入模块和反射机制是Python编程中两种高级特性,它们允许程序在运行时更加灵活地处理代码和数据。动态导入模块是指程序在运行时根据需要动态地加载和使用模块,而不是在程序开始时就静态地导入所有模块。...

Global site tag (gtag.js) - Google Analytics