从基本概念,简单例子才能慢慢走到高级一点的地方。

另外,PYTHON的函数式编程也是我很感兴趣的一点。

总体而言,我觉得OOP可以作大的框架和思路,FP能作细节实现时的优雅牛X。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
“自省”应该是原本的概念,特指在运行时获得object自身信息,这一能力
“反射”是自省的一种实现方式,是具体的。
自省是“道”,反射是“术”。

好比“变量作用域”是一种概念,而“闭包”是作用域中的一种特定技术。

一种语言可以有完整的自省能力而没有“反射”,也可以有完整的作用域功能而没有“闭包”

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  1. import time
  2.  
  3. def timeit(func):
  4.  
  5. def wrapper():
  6.  
  7. start = time.clock()
  8. func()
  9. end = time.clock()
  10. print 'used: ', end - start
  11. return wrapper
  12.  
  13. @timeit
  14. # foo = timeit(foo)
  15. def foo():
  16. print 'in foo()'
  17.  
  18. print foo()
  1. #coding: UTF-8
  2. import sys # 模块,sys指向这个模块对象
  3. import inspect
  4. def foo(): pass # 函数,foo指向这个函数对象
  5.  
  6. class Cat(object): # 类,Cat指向这个类对象
  7. def __init__(self, name='kitty'):
  8. self.name = name
  9. def sayHi(self): # 实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问
  10. print self.name, 'says Hi!' # 访问名为name的字段,使用实例.name访问
  11.  
  12. cat = Cat() # cat是Cat类的实例对象
  13.  
  14. print Cat.sayHi # 使用类名访问实例方法时,方法是未绑定的(unbound)
  15. print cat.sayHi # 使用实例访问实例方法时,方法是绑定的(bound)
  16.  
  17. cat = Cat('kitty')
  18.  
  19. print cat.name # 访问实例属性
  20. cat.sayHi() # 调用实例方法
  21.  
  22. print dir(cat) # 获取实例的属性名,以列表形式返回
  23. if hasattr(cat, 'name'): # 检查实例是否有这个属性
  24. setattr(cat, 'name', 'tiger') # same as: a.name = 'tiger'
  25. print getattr(cat, 'name') # same as: print a.name
  26.  
  27. getattr(cat, 'sayHi')() # same as: cat.sayHi()
  28.  
  29. print Cat.__doc__ # None
  30. print Cat.__name__ # Cat
  31. print Cat.__module__ # __main__
  32. print Cat.__bases__ # (<type>,)
  33. print Cat.__dict__ # {'__module__': '__main__', ...}</type>
  34.  
  35. print cat.__dict__
  36. print cat.__class__
  37. print cat.__class__ == Cat # True
  38.  
  39. im = cat.sayHi
  40. print im.im_func
  41. print im.im_self # cat
  42. print im.im_class # Cat
  43.  
  44. co = cat.sayHi.func_code
  45.  
  46. print co.co_names # ('name',)
  47. print co.co_varnames # ('self',)
  48.  
  49. im = cat.sayHi
  50. if inspect.isroutine(im):
  51. im()
  52.  
  53. print inspect.getmro(Cat)
  54. #(<class '__main__.Cat'>, <type 'object'>)
  55. print Cat.__mro__
  56. #(<class '__main__.Cat'>, <type 'object'>)
  57. class Dog: pass
  58. print inspect.getmro(Dog)
  59. #(<class __main__.Dog at 0x...>,)
  60. print Dog.__mro__ # AttributeError

关于PYTHON的反射,装饰的练习的更多相关文章

  1. 【Python】【装饰器】

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...

  2. Python 语法糖装饰器的应用

    Python中的装饰器是你进入Python大门的一道坎,不管你跨不跨过去它都在那里. 为什么需要装饰器 我们假设你的程序实现了say_hello()和say_goodbye()两个函数. def sa ...

  3. python高级之装饰器

    python高级之装饰器 本节内容 高阶函数 嵌套函数及闭包 装饰器 装饰器带参数 装饰器的嵌套 functools.wraps模块 递归函数被装饰 1.高阶函数 高阶函数的定义: 满足下面两个条件之 ...

  4. [python基础]关于装饰器

    在面试的时候,被问到装饰器,在用的最多的时候就@classmethod ,@staticmethod,开口胡乱回答想这和C#的static public 关键字是不是一样的,等面试回来一看,哇,原来是 ...

  5. python的反射机制

    转载自:http://www.cnblogs.com/feixuelove1009/p/5576206.html 对编程语言比较熟悉的朋友,应该知道"反射"这个机制.Python作 ...

  6. python的反射

    目前大多数网站都是通过路由的方法来,处理url请求,如果有很多个url的话,不停的include或者用if判断匹配,似乎不太符合情理,因此这里讲讲python的反射机制, 自动装在模块.请看下面的实例 ...

  7. python笔记 - day4-之装饰器

                 python笔记 - day4-之装饰器 需求: 给f1~f100增加个log: def outer(): #定义增加的log print("log") ...

  8. Python深入05 装饰器

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 装饰器(decorator)是一种高级Python语法.装饰器可以对一个函数.方法 ...

  9. Day04 - Python 迭代器、装饰器、软件开发规范

    1. 列表生成式 实现对列表中每个数值都加一 第一种,使用for循环,取列表中的值,值加一后,添加到一空列表中,并将新列表赋值给原列表 >>> a = [0, 1, 2, 3, 4, ...

  10. Noah的学习笔记之Python篇:装饰器

    Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang  (http://www.cnblogs.com/noahzn/) ...

随机推荐

  1. TM4C123GH6PM程序

    模式一&模式二:单次计时&周期计时/******************************************* 开发坏境:CCSv5.4 开发板:TIVA C Launch ...

  2. ios Swift 特性

    特性提供了关于声明和类型的更多信息.在Swift中有两类特性,用于修饰声明的以及用于修饰类型的.例如,required特性,当应用于一个类的指定或便利初始化器声明时,表明它的每个子类都必须实现那个初始 ...

  3. C# Winform AutoScaleMode属性

    属性的用法: None : 禁用自动缩放.(默认时) Font :根据类使用的字体(通常为系统字体)的维度控制缩放. Dpi : 根据显示分辨率控制缩放.常用分辨率为 96 和 120 DPI. In ...

  4. PHP学习笔记 - 进阶篇(6)

    PHP学习笔记- 进阶篇(6) 会话控制(session与cookie) 当前的Cookie为: cookie简介 Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据. ...

  5. Contest1065 - 第四届“图灵杯”NEUQ-ACM程序设计竞赛(个人赛)C粉丝与汉诺塔

    题目描述 苟利国家生死以,岂因福祸避趋之?作为ACM真正的粉丝,应该都听闻过汉诺塔问题,汉诺塔问题是这样的: 有三根柱子,编号A,B,C柱,初始情况下A柱上有n个盘子,小盘子在上大盘子在下,n个盘子大 ...

  6. 我对c++对象内存布局的理解

    引言 结合网上的一些资料,通过自己的一番摸索,得出了一点个人见解.现在写下来,希望与各位同学共同探讨,共同进步. 以下所有代码均是在VS2012下测试. 一个普通的基类 1: #include < ...

  7. TCL_事务控制语言

    TCL     transaction  事务   --  DML            定义为把一连串的操作作为单个逻辑工作单元处理                -----     例如:银行转账 ...

  8. NSS_01 开始

    工作中一直使用asp.net webform, 最近有一个新的小项目, 决定用asp.net mvc3, 边学习边工作吧,记录一下开发过程中的问题,因为工作嘛,只记录问题,可能不会很详细. 准备使用a ...

  9. 【SQLite】使用事务处理带参数的插入

    using (SQLiteConnection conn = new SQLiteConnection(String.Format("Data Source={0};Pooling=true ...

  10. jQuery scroll(滚动)延迟加载

    延迟加载 $(window).scroll(function(){ var scrollHeight = $(document).height(); //文档高度 var scrollTop = $( ...