博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于PYTHON的反射,装饰的练习
阅读量:7202 次
发布时间:2019-06-29

本文共 2123 字,大约阅读时间需要 7 分钟。

 

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

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

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

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

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

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

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

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

import timedef timeit(func):    def wrapper():        start = time.clock()        func()        end = time.clock()        print 'used: ', end - start    return wrapper@timeit# foo = timeit(foo)def foo():    print 'in foo()'    print foo()
#coding: UTF-8import sys #  模块,sys指向这个模块对象import inspectdef foo(): pass # 函数,foo指向这个函数对象 class Cat(object): # 类,Cat指向这个类对象    def __init__(self, name='kitty'):        self.name = name    def sayHi(self): #  实例方法,sayHi指向这个方法对象,使用类或实例.sayHi访问        print self.name, 'says Hi!' # 访问名为name的字段,使用实例.name访问 cat = Cat() # cat是Cat类的实例对象 print Cat.sayHi # 使用类名访问实例方法时,方法是未绑定的(unbound)print cat.sayHi # 使用实例访问实例方法时,方法是绑定的(bound)cat = Cat('kitty') print cat.name # 访问实例属性cat.sayHi() # 调用实例方法 print dir(cat) # 获取实例的属性名,以列表形式返回if hasattr(cat, 'name'): # 检查实例是否有这个属性    setattr(cat, 'name', 'tiger') # same as: a.name = 'tiger'print getattr(cat, 'name') # same as: print a.name getattr(cat, 'sayHi')() # same as: cat.sayHi()print Cat.__doc__           # Noneprint Cat.__name__          # Catprint Cat.__module__        # __main__print Cat.__bases__         # (
,)print Cat.__dict__ # {'__module__': '__main__', ...}
print cat.__dict__print cat.__class__print cat.__class__ == Cat # Trueim = cat.sayHiprint im.im_funcprint im.im_self # catprint im.im_class # Catco = cat.sayHi.func_codeprint co.co_argcount # 1print co.co_names # ('name',)print co.co_varnames # ('self',)print co.co_flags & 0b100 # 0im = cat.sayHiif inspect.isroutine(im): im()print inspect.getmro(Cat)#(
,
)print Cat.__mro__#(
,
)class Dog: passprint inspect.getmro(Dog)#(
,)print Dog.__mro__ # AttributeError

 

转载地址:http://vmbum.baihongyu.com/

你可能感兴趣的文章
MongoDB快速入门
查看>>
linux 安装 nginx 及反向代理配置
查看>>
转 11g RAC R2 体系结构---Grid
查看>>
transition-分栏按钮动画
查看>>
[你必须知道的异步编程]——基于任务的异步模式
查看>>
lxml.etree 教程4:Elements contain text
查看>>
09 常见事件响应
查看>>
【LeetCode 228_数组】Summary Ranges
查看>>
java.lang.ArithmeticException: / by zero
查看>>
JAVA 类与对象题目3
查看>>
centos7系统备份与还原
查看>>
黑白灰,色彩厚涂
查看>>
机器学习 — 决策树建模
查看>>
弹射起步~django
查看>>
C# 中的 == 和 equals()有什么区别?
查看>>
JavaScript下判断元素是否存在
查看>>
ELK安装过程
查看>>
spring mvc 传入中文参数乱码问题解决
查看>>
进度条6
查看>>
Docker中运行mysql容器
查看>>