- 浏览: 567724 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (618)
- java (109)
- Java web (43)
- javascript (52)
- js (15)
- 闭包 (2)
- maven (8)
- 杂 (28)
- python (47)
- linux (51)
- git (18)
- (1)
- mysql (31)
- 管理 (1)
- redis (6)
- 操作系统 (12)
- 网络 (13)
- mongo (1)
- nginx (17)
- web (8)
- ffmpeg (1)
- python安装包 (0)
- php (49)
- imagemagic (1)
- eclipse (21)
- django (4)
- 学习 (1)
- 书籍 (1)
- uml (3)
- emacs (19)
- svn (2)
- netty (9)
- joomla (1)
- css (1)
- 推送 (2)
- android (6)
- memcached (2)
- docker、 (0)
- docker (7)
- go (1)
- resin (1)
- groovy (1)
- spring (1)
最新评论
-
chokee:
...
Spring3 MVC 深入研究 -
googleyufei:
很有用, 我现在打算学学Python. 这些资料的很及时.
python的几个实用网站(转的) -
hujingwei1001:
太好了找的就是它
easy explore -
xiangtui:
例子举得不错。。。学习了
java callback -
幻影桃花源:
太好了,謝謝
Spring3 MVC 深入研究
转自http://blog.csdn.net/lokibalder/article/details/3459722
本文主要介绍 python 中的反射和自省,以及该机制的简单应用
熟悉 JAVA 的程序员,一定经常和 Class.forName 打交道。即使不是经常亲自调用这个方法,但是在很多框架中( Spring , eclipse plugin 机制)都依赖于 JAVA 的发射和自省能力。而在 python 中,也同样有着强大的反射和自省能力,本文将做简单的介绍。
首先看一下自省,介绍一下几个重要的函数:
dir 函数,传入的参数是对象,返回该对象的所有属性和函数列表:
如:
可以看到, string 对象的所有函数,属性都列举出来了。
getattr 方法,传入参数是对象和该对象的函数或者属性的名字,返回对象的函数或者属性实例,如下:
callable 方法,如果传入的参数是可以调用的函数,则返回 true ,否则返回 false 。
下面这段代码列出对象所有函数:
methodList = [method for method in dir(object) if callable(getattr(object,method))]
比如查看 string 的所有函数:
接下来,看看 python 的是如何体现反射的。
globals ()
这个函数返回一个 map ,这个 map 的 key 是全局范围内对象的名字, value 是该对象的实例。
在不导入任何 module 下,执行 globals ()的结果如下:
在导入 sys 后,可以发现, globals ()返回的 map 中,多了 sys module :
在导入 sgmllib ,如下 :
如果导入类后,在 map 中,可以找到类。
所以,只要将 class 的名字最为 key ,即可得到 class 。如下:
而如果要实例化一个对象,可以如下:
这样,实现了类似 java 中, Class.forName () .newInstance() 的功能。但是,在使用 globals 函数之前,还需要导入相应的类,如果不导入,而直接使用 globals[‘...’] 查找这个类,则会抛出异常。
所以,我在介绍一种可以动态导入的方法。
首先,介绍一个函数 __import__, 这个函数传入的参数是 module 的名字,返回这个 module ,然后,在结合之前介绍过的 getattr ,于是,我们可以写出下面两句代码,实现对象的自省。
由此可见, python 提供的反射和自省机制是十分便捷的。这也方便了很多操作。比如,如下这段代码,将导入脚本文件所在文件夹下的所有测试文件(以 test 结尾的脚本文件 0 ,并进行测试。
代码出自 dive in python (这本书写的很好),比较容易理解,不做详细介绍了。主要是先获得目录,然后过滤出符合条件的脚本文件,去掉后缀名,作为模块加载。
发表评论
-
Django静态文件处理总结
2015-05-13 13:59 545原文地址:http://blog.csdn.net/wenxu ... -
原 异步非阻塞机制与多线程阻塞机制在处理并发耗时等待任务上的效率对比分析
2015-04-21 10:05 700原文地址:http://my.oschina.net/mall ... -
Django报错“_mysql_exceptions.Warning: Incorrect string value: ‘\xE6\xB5…’ for colu
2015-03-25 15:50 1002原文地址:http://www.tuicool.com/art ... -
django使用mysql时的中文存储问题 - [python]
2015-03-25 15:36 1507原文地址:http://www.blogbus.com/831 ... -
NIO学习笔记——解决“服务器端cpu占用率高”
2015-01-29 10:17 994原文地址:http://blog.csdn ... -
python 调用 php 实例
2014-06-23 14:09 2630原文地址:http://hi.baidu.com/ji_hai ... -
php调用python
2014-06-23 14:08 798原文地址:http://blog.163.com/darwin ... -
uwsgi python ssl编译问题记录
2014-06-19 14:24 882uwsgi python ssl编译问题记录 发表于6个月前( ... -
python2.7 安装ssl模块
2014-06-19 14:22 3229python2.7 安装ssl模块 2012-02-28 13 ... -
Centos6.5下升级Python 2.6.6 to python 2.7.3
2014-06-19 13:53 661Centos6.5下升级Python 2.6.6 to pyt ... -
翻译:redis-py 说明文件 (2012-05-30 17:55:52)
2014-06-04 10:22 465翻译:redis-py 说明文件 (2012-05-30 17 ... -
关于Redis的Python客户端的连接池问题
2014-06-04 10:21 629关于Redis的Python客户端的连接池问题 在一 ... -
Windows下 Python 安装包的配置
2014-03-22 10:23 6611、下载安装 Python python-2.7.2.msi ... -
[翻译]深入理解Tornado——一个异步web服务器
2014-03-07 15:16 1647[翻译]深入理解Tornado— ... -
多版本Python共存[支持使用pip安装包]
2014-02-28 10:59 1151多版本Python共存[支持使 ... -
Django 数据库访问性能优化
2013-09-05 15:22 686Django 数据库访问性 ... -
Python六大开源框架对比:Web2py略胜一筹
2013-08-21 11:29 833Python是一门动态、面向对象语言。其最初就是作为一门面向 ... -
Python 代码调试技巧
2013-08-15 18:11 877使用 pdb 进行调试 pdb 是 python 自带的 ... -
python urlencode 编码
2013-07-05 13:28 968urlencode 调用方法 urlencode的参 ... -
window下使用virtualenv
2013-06-30 15:26 1120--- window下使用virtualenv -- ...
相关推荐
Python的自省(反射)能力是指程序在运行时能够获取并操作对象的内部信息,包括对象的属性、方法、类型等。这对于编写高度动态和灵活的代码尤其有用。本文主要介绍如何利用Python的内置模块`inspect`来实现自省。 `...
本文实例讲述了Python面向对象之反射/自省机制。分享给大家供大家参考,具体如下: 反射:程序可以访问,检测和修改它本身状态或行为的一种能力(自省) 下面就介绍四种实现自省的函数,适用于类和对象 1. 判断...
Python反射机制和动态加载模块 Python语言中有一个非常重要的功能称为反射机制(Reflection),它允许程序在运行时访问、检测和修改自身的状态或行为,这种能力也被称为自省(Introspection)。在Python中,反射...
在Python中,自省(也称为反射)是一种强大的特性,它允许程序在运行时检查和修改自身的结构与行为。这种能力对于创建灵活和可扩展的应用程序尤其有用。本文将深入探讨Python中的自省功能,并通过实际例子来说明如何...
Python中的自省与反射 由于Python是一门强类型的动态解释型语言,故我们在某些时候并... Python中使用delattr()和setattr()实现反射,而其他方法则属于自省。 反射和自省常常组合使用! Python中关于反射与自
在Python编程语言中,反射和描述器是两个重要的特性,它们提供了高级的元编程能力,使得程序员可以在运行时动态地检查、操作甚至修改对象的行为。本文将深入探讨这两个概念及其在Python中的应用。 首先,反射是指...
自省在Python中无处不在,它使得调试、测试和动态编程变得更加容易。例如,动态创建类、元编程、反射等高级功能都依赖于自省。通过自省,程序员可以在运行时检查变量的类型,确保数据正确性,或者根据对象的属性和...
Python动态导入模块和反射机制是Python编程中两种高级特性,它们允许程序在运行时更加灵活地处理代码和数据。动态导入模块是指程序在运行时根据需要动态地加载和使用模块,而不是在程序开始时就静态地导入所有模块。...
在实际项目开发中,反射常用于动态生成代码、元编程以及自省,而单例模式则常用于控制资源的共享,如数据库连接池、缓存管理等场景。通过实例化和初始化类,我们可以创建和操纵对象,而添加和访问类的属性则有助于...
反射的定义:检测和修改它本身状态或行为的一种能力(自省)。 而通过反射,Python可以通过字符串的映射或修改程序运行的状态和方法。 反射的四个方法。hasattr,getattr,setattr,delattr hasattr:判断一个方法...
– 反射主要是指程序可以访问、检测和修改它本身状态或行为的一种能力(自省) 面向对象中的反射 – 通过字符串的形式来操作(获取、检查、增加、删除)对象中的成员 – python中的一切事物都是对象(都可以...
通过元编程,可以动态创建类、修改类的行为,甚至实现自省和反射机制。 3. **异常处理**:异常是Python中处理错误和异常情况的方式。书里会讲解如何使用`try/except`语句捕获和处理异常,以及`finally`块用于确保...
Python中的方法可以分为三种类型:实例方法、静态方法和类方法。 - 实例方法:是通过类的实例调用的方法,它需要第一个参数为实例的引用(通常命名为self)。实例方法可以访问实例的属性和其它方法。 - 静态方法:...
在反射(Reflection)的概念下,对象能够根据名称来访问其自身的属性,这在Python中称为自省(Introspection)。例如,通过传递字符串参数给getattr()函数,我们可以在运行时动态地获取对象的属性值。自省机制使得...
回顾面向对象编程 让我们先用 30 秒钟来回顾一下 OOP 到底是什么。在面向对象编程语言中,可以定义 类,它们的用途是将相关的数据和行为...一些 OOP 语言(包括 Python)允许对象是 自省的(也称为 反射)。即,自省