python装饰器
python 中的多态性是基于对象的行为的。在其它语言中,比如c++中对象被要求属于某个类或者实现接口。但是在python中需要的是遵守给定的几个规则。比如,想写一个序列,那么只需要遵循序列的规则。
静态方法和类成员方法
静态方法和类成员方法在创建时分别被装入staticmethod类型和classmethod类型的对象。
静态方法没有self参数,并且能够被类本身调用。
类成员方法用cls参数取代self参数,且可以被类的对象调用,值得注意的是,cls是绑定到类的。
![Python学习笔记(九) - ajstar - ajstar的博客](http://img169.ph.126.net/2rQb8fpISyStfhqFZK0ZuQ==/2170735020394549428.png)
下面是调用的结果:
![Python学习笔记(九) - ajstar - ajstar的博客](http://img382.ph.126.net/tNcT3oFq9W-XPGP-PZWjiw==/2452209997104377410.png)
当然在python2.4后有了装饰器(decorator)。是用@操作符在函数或者方法上方列出装饰器,装饰器可以试一个也可以是多个,多个装饰器在应用时的顺序与指定的顺序相反。
于是,上面的定义就可以改成下面这样:
![Python学习笔记(九) - ajstar - ajstar的博客](http://img699.ph.126.net/tQA8uJ8QenEOCxa3uNZUMg==/2839801040035051112.png)
迭代器
所谓的迭代器就是具有next方法(无参数)的对象。
实现__iter__方法的对象
在调用next方法时,迭代器会返回下一个值。如果next方法被调用但是迭代器没有值可以返回,那么会引发一个StopInteration异常。在Python3中又有了新的变化。
![Python学习笔记(九) - ajstar - ajstar的博客](http://img534.ph.126.net/pniOgL0L2ru7FSmJFfUczg==/2652620180522331517.png)
这个斐波拉契数列,注意,它实现了__iter__方法,它返回迭代器本身。
一个实现了__iter__方法的对象是可迭代的,一个实现了next方法的对象是一个迭代器。
![Python学习笔记(九) - ajstar - ajstar的博客](http://img120.ph.126.net/_1TcY34pLUQ3LTmzXLE1xg==/2003538884228228038.png)
迭代器的厉害之处还在于可以从它得到列表,从而避免了传递一个很大的列表,这样节约了内存,并且使程序变得更通用简洁优雅。
把上面的斐波拉契函数稍加改动:
![Python学习笔记(九) - ajstar - ajstar的博客](http://img768.ph.126.net/Zbe191SO4L4nzPCwEt_IWg==/1254252496223578763.png)
当斐波拉契数大于1000时,就不再做了。我们可以用list得到这时的列表:
![Python学习笔记(九) - ajstar - ajstar的博客](http://img382.ph.126.net/iD4mS-JjBTkq-wKMtja4XA==/2444610172733178822.png)
可以对一个方法应用多个装饰方法:
@A
@B
@C
def f ():
#等价于下面的形式,Python会按照应用次序依次调用装饰方法(最近的先调用)
def f():
f = A(B(C(f)))
装饰方法解析:
@A
@B
@C
def f ():
#等价于下面的形式,Python会按照应用次序依次调用装饰方法(最近的先调用)
def f():
f = A(B(C(f)))
装饰方法解析: