Python功能之反射

有如下文件:

index.py

#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = ‘ryan‘"""import homeprint ‘oldboy....‘url=raw_input(‘url:‘)if url == ‘home/dev‘:    ret = home.dev()    print retif url ==‘/home/index‘:    ret = home.index()    print retif url ==‘/home/user‘:    ret = home.user    print retif url == ‘/home/passwd‘:    ret = home.passwd    print retelse:    print ‘404‘"""#getattr、setattr、delattr、 hasattr#找到home文件,将内容加载到内存,然后getattr、setattr、delattr、 hasattr 对home中断函数进行操作#由于函数在没有执行之前,只是将函数名放入内存import home#print dir(home)#print hasattr(home,‘dev‘)#通过函数hasattr到内存中找到home模块,判断home模块下是否存在dev函数,有返回True,否则返回false#print dir(home)#print getattr(home,‘dev‘)#到内存中的home模块中去获取函数dev(其实时获取dev函数在内存中的地址)#print setattr(home,‘alex‘,‘gentle man‘)#通过setattr对内存中的home模块添加一个字符串alex#print dir(home)#delattr(home,‘dev‘)#通过delattr删除内存中home模块中的dev函数#print dir(home)#"""class Foo:    static_name=‘nba‘    def __init__(self):        self.name=‘alex‘    def show(self):        pass    @staticmethod    def static_show(self):        pass    @classmethod    def class_show(cls):        pass#obj=Foo()#print Foo.__dict__.keys() #查看类里面的成员#print hasattr(Foo,‘static_show‘)#print obj.__dict__#查看对象里有哪些成员#print hasattr(obj,‘name‘)#print hasattr(obj,‘show‘)#普通方法是存储在类里,但是这里用hasattr函数在对象obj中查找是否存在show方法,返回了Ture,原因是在对象obj中没有找到之后会通过对象指针到创建对象的类中进一步查找,所以这里返回True""""""print hasattr(Foo,‘__init__‘)print "##########分隔符①################"print hasattr(Foo,‘static_name‘)print "##########分隔符②################"print hasattr(Foo,‘show‘)print "##########分隔符③################"print hasattr(Foo,‘static_show‘)print "##########分隔符④################"print hasattr(Foo,‘class_show‘)obj=Foo()print obj.__dict__print hasattr(obj,‘show‘)print hasattr(obj,‘__init__‘)print "##########分隔符①################"print hasattr(obj,‘static_name‘)print "##########分隔符②################"print hasattr(obj,‘show‘)print "##########分隔符③################"print hasattr(obj,‘static_show‘)print "##########分隔符④################"print hasattr(obj,‘class_show‘)""""""import homecls = getattr(home,"Foo")print clss_name = getattr(cls,‘static_name‘)print s_namec_show = getattr(cls,‘show‘)print c_shows_show=getattr(cls,‘static_show‘)print s_showcla_show = getattr(cls,‘class_show‘)print cla_show"""import homecls = getattr(cls,‘Foo‘)obj=cls()#实例化一个对象objname = getattr(obj,‘name‘)print name

home.py

#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = ‘ryan‘def index():    return ‘result home.index‘def dev():    return ‘result home.dev‘def user():    return ‘result home.user‘def passwd():    return ‘result home.passwd‘"""class Foo:    static_name=‘nba‘    def __init__(self):        self.name=‘alex‘    def show(self):        pass    @staticmethod    def static_show(self):        pass    @classmethod    def class_show(cls):        pass"""

反射

fanshe.py

#!/usr/bin/env python# -*- coding:utf-8 -*-__author__ = ‘ryan‘url = raw_input(‘url:‘)controller,action =url.split(‘/‘)import home#action动作是一个字符串,去某个容器(模块)中去找函数,字符串即为函数名,如果有则获取函数func =getattr(home,action)func = dev dev1():     return ‘result home.dev‘     ret = func()#func=getattr(home,‘index‘)ret=func()print ret

webdemo.py

#!/usr/bin/env python
#coding:utf-8
from wsgiref.simple_server import make_server
def RunServer(environ, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])
    url = environ[‘PATH_INFO‘]
    temp = url.split(‘/‘)[1]
    import home
    #去home模块中检查,是否含有指定的函数
    is_exist = hasattr(home, temp)
    #如果存在指定的函数
    if is_exist:
        #获取函数
        func = getattr(home, temp)
        #执行函数并获取返回值
        ret = func()
        #将函数返回值响应响应给请求者,即浏览器
        return ret
    else:
        #如果不存在函数则返回给浏览器‘404 not found‘
        return ‘404 not found‘
if __name__ == ‘__main__‘:
    httpd = make_server(‘‘, 8001, RunServer)
    print "Serving HTTP on port 8001..."
    httpd.serve_forever()
时间: 2024-10-31 12:59:12

Python功能之反射的相关文章

python中的反射

在绝大多数语言中,都有反射机制的存在.从作用上来讲,反射是为了增加程序的动态描述能力.通俗一些,就是可以让用户参与代码执行的决定权.在程序编写的时候,我们会写很多类,类中又有自己的函数,对象等等.这些类和函数都是为了后序代码服务,程序员决定什么时候用到哪一个类,什么时候调用某个函数.但很多时候,我们需要根据用户的需求来决定执行哪一段代码块.用户可能是通过点击,输入数据,或者其他方式发出指令,反射则将用户的指令传递到需要执行的那一段代码块.这个过程是自动执行的,无需人工去核对用户指令是否应该执行那

Python基础之反射

python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author: enzhi.wang class Foo(object): def __init__(self,name): self.name = name def func(self): return

python中的反射和自省

本文主要介绍Python中的反射和自省,以及该机制的简单应用 熟悉Java的程序员,一定经常和Class.forName打交道.即使不是经常亲自调用这个方法,但是在很多框架中(spring,eclipse plugin机制)都依赖于JAVA的反射和自省能力.而在python中,也同样有着强大的反射和自省能力,本文将做简单的介绍. 首先看一下自省,介绍一下几个重要的函数: dir函数,传入的参数是对象,返回该对象的所有属性和函数列表: 如: >>> import string >&g

python基础27——反射&内置方法

反射 什么是反射? 指的是在程序运行过程中可以"动态(不见棺材不掉泪)"获取对象的信息 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省) 什么是反射机制? 反射机制指的是在程序的运行状态中 对于任意一个类,都可以知道这个类的所有属性和方法 对于任意一个对象,都能够调用他的任意方法和属性 这种动态获取程序信息以及动态调用对象的功能称为反射机制 如何实现反射? class People: def __init__(self,

转载:你需要知道的、有用的 Python 功能和特点

文章出处:http://www.oschina.net/translate/python-functions 在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性.一些可以说是非常有用,但却没有充分利用.考虑到这一点,我编辑了一些你应该了解的Python功能特色. 带任意数量参数的函数 你可能已经知道了Python允许你定义可选参数.但还有一个方法,可以定义函数任意数量的参数. 首先,看下面是一个只定义可选参数的例子 1 def function(arg1="",ar

你需要知道的并且对你很有用的 Python 功能和特点

在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性.一些可以说是非常有用,但却没有充分利用.考虑到这一点,我编辑了一些你应该了解的Python功能特色. 带任意数量参数的函数 你可能已经知道了Python允许你定义可选参数.但还有一个方法,可以定义函数任意数量的参数. 首先,看下面是一个只定义可选参数的例子 现在,让我们看看怎么定义一个可以接受任意参数的函数.我们利用元组来实现. 使用Glob()查找文件 大多Python函数有着长且具有描述性的名字.但是命名为的函数你可能不

【Python】5个常用的Python功能代码

今天给大家提供5个最常用的Python功能和它的源代码. 一.随机数生成 >>> import random #导入Python内置的随机模块 >>> num = random.randint(1,1000) #生成1-1000之间的伪随机数 二.读文件 >>> f = open("c:\\1.txt","r") >>> lines = f.readlines() #读出所有内容给变量 f &g

python中使用反射的方法的代码

开发之余,把开发过程中常用的一些内容段做个珍藏,下面的内容是关于python中使用反射的方法的内容,应该是对码农们有一些用途. import sys, types,new def _get_mod(modulePath): try: aMod = sys.modules[modulePath] if not isinstance(aMod, types.ModuleType): raise KeyError except KeyError: # The last [''] is very imp

Python面向对象之反射

首先,我们来看两个内置函数,isinstance和issubclass,前者是判断一个对象是不是相应的类型,比如: obj = 'python' print(isinstance(obj,str)) 判断obj是否为字符串类型,结果返回True 后者issubclass则判断一个类是否为另一个的子类,比如: class A:     pass class B(A):     pass print(issubclass(B,A)) 判断B是否为A的子类,结果返回True 反射:其实它的核心本质其实