装饰器之认祖归宗

来源:互联网 发布:goodtv网络电视台直播 编辑:程序博客网 时间:2024/04/27 19:18

这篇应该是装饰器的最后一篇总结性文章,关于装饰器我实在想不到更多

装饰器就是方法

老实说,剖析了半天装饰器,发现到头来都只是方法的高级用法而已,唯一让人有点觉得高大上的不过是@符号进行的自动注入传参

但是这种符号自动调用方法的例子在python中并不是很少见,类名方法调用创建对象也是一样

真的感到迷惑了,只能说对于python还没有真正的熟悉,少见多怪

装饰器原理

方法入参,内部定义新方法包含,将入参方法操作进行调用,扩充新方法,然后进行返回操作

新方法定义的时候甚至可能会消灭原函数,根本不进行调用,这也是可以拓宽思路的一点

星星点灯

关于*args和**kwargs的作用,以及单星*和双星**的操作含义,前篇已经详尽讲述,这里只做归纳总结

装饰顺序

符号装饰和方法装饰的顺序需要记住

方法装饰同层级装饰,由内而外

单方法多装饰,装饰顺序由外而内,越是靠近原函数,装饰越外层

单例模式

单例模式至今已经采用以下几种方法进行了实现

对象类__new__

元类__call__

元类__init__

类方法装饰器

类装饰器

其中元类__init__属于饿汉模式,其余都属于懒汉模式

方法对象

方法也是对象

方法定义的时候就自动创建了对象实例并进行了赋值

方法的类是function

方法对象的名称就是方法名

方法的括号调用就是执行定义的方法体,可以看做是重写了父类的__call__方法

装饰器能发挥大作用的根本原因

对于函数,元类,对象类,对象这四种对象,都能够直接通过括号进行方法的执行调用,在对象和函数之间任意切换

作为对象传入却携带了执行语句,传出却是定义的新语句,加上在方法内部定义的语句只有在进行方法调用时才进行执行的时机性

才造就了装饰器,及其复杂多变和涉及面广等特性

不过装饰器也就设计这四类事物,也只是方法的一种高级用法

涉及类别

元类,对象类,对象,方法


装饰器是方法的高级用法,如是而已,方法研究告一段落,知识不足,继续补充,有更新的见解请大家不吝赐教