python装饰器

python 中的多态性是基于对象的行为的。在其它语言中,比如c++中对象被要求属于某个类或者实现接口。但是在python中需要的是遵守给定的几个规则。比如,想写一个序列,那么只需要遵循序列的规则。

静态方法和类成员方法
静态方法和类成员方法在创建时分别被装入staticmethod类型和classmethod类型的对象。
静态方法没有self参数,并且能够被类本身调用。
类成员方法用cls参数取代self参数,且可以被类的对象调用,值得注意的是,cls是绑定到类的。

Python学习笔记(九) - ajstar - ajstar的博客

 下面是调用的结果:

Python学习笔记(九) - ajstar - ajstar的博客

 当然在python2.4后有了装饰器(decorator)。是用@操作符在函数或者方法上方列出装饰器,装饰器可以试一个也可以是多个,多个装饰器在应用时的顺序与指定的顺序相反。
于是,上面的定义就可以改成下面这样:

Python学习笔记(九) - ajstar - ajstar的博客

 迭代器
所谓的迭代器就是具有next方法(无参数)的对象
实现__iter__方法的对象
在调用next方法时,迭代器会返回下一个值。如果next方法被调用但是迭代器没有值可以返回,那么会引发一个StopInteration异常。在Python3中又有了新的变化。

Python学习笔记(九) - ajstar - ajstar的博客

 这个斐波拉契数列,注意,它实现了__iter__方法,它返回迭代器本身。
一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象是一个迭代器。

Python学习笔记(九) - ajstar - ajstar的博客

迭代器的厉害之处还在于可以从它得到列表,从而避免了传递一个很大的列表,这样节约了内存,并且使程序变得更通用简洁优雅。
把上面的斐波拉契函数稍加改动:

Python学习笔记(九) - ajstar - ajstar的博客

 当斐波拉契数大于1000时,就不再做了。我们可以用list得到这时的列表:

Python学习笔记(九) - ajstar - ajstar的博客
 
可以对一个方法应用多个装饰方法:
@A
@B
@C
def f ():

#等价于下面的形式,Python会按照应用次序依次调用装饰方法(最近的先调用)
def f():
f = A(B(C(f)))
装饰方法解析:
原文地址:https://www.cnblogs.com/SophiaTang/p/2197046.html