zoukankan      html  css  js  c++  java
  • 鸭子类型和白鹅类型以及python的虚拟子类注册器

    鸭子类型基本定义

    python是一种多态语言,崇尚鸭子类型。

    鸭子类型: 鸭子类型没有明确的接口,只是遵循了一定的协议,比如python序列协议只需要实现lengetitem方法 对于序列,这点鸭子类型和白鹅类型中Sequence抽象基类的要求完全相同,只是白鹅类型Sequence继承后能够自动获得抽象基类的方法,而鸭子类型没有这些方法.

    “当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

    python 白鹅类型和鸭子类型 白鹅类型: 白鹅类型对接口有明确定义,比如不可变序列(Sequence),需要实现containsiterlengetitemreversed,index,count 对于其中的抽象方法,子类在继承时必须具体化,其余非抽象方法在继承时可以自动获得,Sequence序列必须具体化的抽象方法是lengetitem

    实际上这些语言特性Golang也比较推崇

    虚拟子类

    如果不继承抽象基类,也可以通过abc.xxx.register声明方式,自己实现一个包含实现方法的类,这种类叫虚拟子类,虚拟子类不强制实现父类的所有方法,也就是无论编译时还是运行时,除非我调用这个方法你不存在才会报错,类前面加上@abc.xxx.register注解。py3.3之前register只是一个函数,所以只能函数调用类写到()里

     

  • 相关阅读:
    Codeforces Round #564 (Div. 1)
    Codeforces Round #569 (Div. 1)
    SDOI2019R2游记
    BZOJ 3555: [Ctsc2014]企鹅QQ
    SDOI2019R1游记
    计数的一些东西
    多项式的各种操作
    BZOJ 5424: 烧桥计划
    Codeforces Round #545 (Div. 1)
    概率期望学习笔记
  • 原文地址:https://www.cnblogs.com/handso/p/14074016.html
Copyright © 2011-2022 走看看