zoukankan      html  css  js  c++  java
  • 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)))
    装饰方法解析:
  • 相关阅读:
    利用PHP SOAP实现WEB SERVICE
    PHP 简单的加密解密算法
    Java 简单的加密解密算法
    去掉php框架CI默认url中的index.php
    PHP 日期计算函数【差异天数】
    PHP生成迅雷、快车、旋风等软件的下载链接代码实例
    转:苹果iphone APP界面设计尺寸官方版
    iOS开发——密码存储之keychain的使用
    Simple iPhone Keychain Access
    View的简单说明
  • 原文地址:https://www.cnblogs.com/SophiaTang/p/2197046.html
Copyright © 2011-2022 走看看