有如下文件:

index.py

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

home.py

1
<span style="font-family:'宋体', SimSun;">#!/usr/bin/env python<br># -*- coding:utf-8 -*-<br>__author__ = 'ryan'<br>def index():<br>    return 'result home.index'<br>def dev():<br>    return 'result home.dev'<br>def user():<br>    return 'result home.user'<br>def passwd():<br>    return 'result home.passwd'<br>"""<br>class Foo:<br>    static_name='nba'<br>    def __init__(self):<br>        self.name='alex'<br>    def show(self):<br>        pass<br>    @staticmethod<br>    def static_show(self):<br>        pass<br>    @classmethod<br>    def class_show(cls):<br>        pass<br>"""<br></span>

反射

fanshe.py

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

webdemo.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/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()

      本文转自027ryan  51CTO博客,原文链接:http://blog.51cto.com/ucode/1763328,如需转载请自行联系原作者

Python功能之反射相关推荐

  1. 【专题】详解Python中的反射机制

    Python面向对象的反射机制 一.反射的概念 二.熟悉面向对象的属性方法 三.面向对象的反射机制 四.实例应用 一.反射的概念 python的反射机制,核心就是利用字符串去已存在的模块中找到指定的属 ...

  2. python对象方法 反射

    前言 类实例化得到的对象可以直接调用类中定义的函数,并且可以将对象本身作为第一个参数,那么类能不能也能像对象一样使用类体中的函数而不需要传递第一个参数呢?如果我们使用别人封装好的类,如何判断这个类或者 ...

  3. python 功能 代码_挑战“不可能”的代码:你不知道的Python功能

    本文转载自公众号"读芯术"(ID:AI_Discovery) Python看似简单,但实则变化万千,笔者总都能看到一些代码以近乎不可能的方式呈现.这些功能很精妙,以至于我无法想象没 ...

  4. python功能分享_Python中非常实用的一些功能和函数分享

    在使用Python多年以后,我偶然发现了一些我们过去不知道的功能和特性.一些可以说是非常有用,但却没有充分利用.考虑到这一点,我编辑了一些你应该了解的Python功能特色. 带任意数量参数的函数你可能 ...

  5. 5个常用的Python功能代码

    大家都在 Python论坛里讨论.交流,你还在等什么!赶快加入! 今天玩蛇网给大家提供5个最常用的Python功能和它的源代码. 一.随机数生成 >>> import random  ...

  6. 我希望我一开始就知道的5个Python功能

    Python可以说是十年来新兴的编程语言,并且被证明是一种非常强大的语言. 从交互式地图到区块链,我已经使用Python构建了许多应用程序. Python有许多功能,对于初学者来说,一开始很难掌握所有 ...

  7. Python自省(反射)指南 1

    Python自省(反射)指南 在笔者,也就是我的概念里,自省和反射是一回事,当然其实我并不十分确定一定以及肯定,所以如果这确实是两个不同的概念的话,还请多多指教 :) 转载请注明作者.出处并附上原文链 ...

  8. python自省与反射

    DAY 5. python自省 这是很久之前写的,当时对自省和反射的概念没理解,学习Java以后多了一点理解,自省是获取对象的能力,反射是操纵对象的能力,python中使用getattr()和seta ...

  9. python的功能及特点_python公开课|你必须知道的,这些实用的Python功能和特点!

    [摘要]在这个科学技术高速发展的时代,越来越多的人都开始选择学习编程软件,那么首先被大家选择的编程软件就是python,也用在各行业之中,并被大家所熟知,所以也有越来越多的学习者关注实用的Python ...

最新文章

  1. javascript按字节截取标题中字符串
  2. ip camera芯片级解决方案
  3. Package ‘oniguruma’, required by ‘virtual:world’, not found
  4. 因离职,3人拟终止人才项目!
  5. IBM研究院计画5年改变人类生活创新预测
  6. Laravel Collection 常用方法(1)
  7. 处理中文乱码以及登陆验证的过滤器Filter(建议收藏)
  8. 搜索总结c++ 内存泄露问题
  9. 【转】ajax发送请求时候为什么会报拒绝设置不安全的header
  10. ubuntu 16.04 64位 搭建GenieACS
  11. Axure RP9Team版可用授权
  12. 3DMark2001 SE + 汉化包 下载
  13. Visual Tracking via Adaptive Structural Local Sparse Appearance Model
  14. 推荐收藏 | 掌握这些步骤,机器学习模型问题药到病除
  15. Xavier法与何恺明法初始化权重的意义及原理
  16. 更新升级windows11提示“该电脑必须支持安全启动
  17. Unity3D之鼠标的隐藏与显示
  18. jQuery的jsTree入门使用
  19. Firefox OS应用程序入门
  20. 常用的几款3D软件介绍

热门文章

  1. android8.1自定义通知栏,Android 8.1隐藏状态栏图标的实例代码
  2. Struts2的action中处理JSONP方式提交的中文乱码问题:
  3. leetcode543. 二叉树的直径
  4. leetcode448. 找到所有数组中消失的数字 天秀记录法
  5. leetcode389. 找不同
  6. 橙白oj18训练作业2-题解、代码
  7. jwt 私钥_什么是 JSON Web Token(JWT)
  8. 基于HubServing的PaddleOCR部署
  9. C语言 结构体 struct Cat cat1;
  10. 广州驾校考试实际道路考试注意事项(图)