鸭子类型

定义

  • 在维基百科中的准确定义是‘是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定’
  • 个人理解:实现了指定的方法就可以拿来当特定的类型用 , 比如__getitem__就可以当做collection用 , 来切片索引与静态类型来对比(比如java):多态,你可以用父类的引用而传入子类的对象,而鸭子类型不用继承,更为灵活。(:多态最核心的思想就是,父类的引用可以指向子类的对象,或者接口类型的引用可以指向实现该接口的类的实例。多态之所以是这样的是因为基于一个事实:子类就是父类!)鸭子类型是一种不严格的类型,弱类型有相同方法的类型,可以归为一类鸭子
class Duck():def walk(self):print("i'm walking!")
class People():def walk(self):print("i'm walking!")
def test(animal): #  核心就是这里并不检查animal类型,所以只要实现了walk方法的都行animal.walk()
duck = Duck()
people = People()
test(duck)
test(people)
i'm walking!
i'm walking!

对于一个鸭子类型来说,我们并不关心这个对象的类型本身或是这个类继承,而是这个类是如何被使用的。

python协议

定义

protocol可以看作是通知型的接口,它规定了调用方使用该功能要调用对象的哪些方法
比如要做切片等操作,实现__getitem__()就行,根据协议,进行切片的时候就会去使用该方法

参考

  1. Python的鸭子类型
  2. Python - 协议和鸭子类型

python鸭子类型与协议理解相关推荐

  1. python鸭子类型

    python鸭子类型 python不支持多态,也不用支持多态,而是一种多态的语言. 鸭子类型(duck typing):是动态类型的一种风格,不是由继承特定的类或实现特定的接口,而是当前的方法和属性的 ...

  2. python 鸭子类型_Python中的鸭子输入是什么?

    python 鸭子类型 Python遵循EAFP(比许可更容易请求宽恕)而不是LBYL(跨越式). EAFP的Python哲学在某种程度上与其"鸭子打字"编码风格有关. 当程序员在 ...

  3. python鸭子类型_Python的鸭子类型

    '那只东西呱呱的叫,有扁扁的嘴巴,走起路来还外八,对!它就是只鸭子'基本定义 对于熟悉python的开发者来说,相信对于python的鸭子类型比较熟悉,所谓鸭子类型,在维基百科中的准确定义是'是动态类 ...

  4. 用python画小鸭_python中的鸭子类型(协议)和接口

    定义 1. 接口(interface) 学过静态语言的同学一定对接口的概念并不陌生,它类似于我们家里用的插座标准,要用电器时,我们得先查看对应的插头是否和插座孔匹配.也正因为此,接口给我们提供了很大的 ...

  5. Python 鸭子类型的理解

    鸭子类型最简洁的解释与理解 用一句概括 进一步解释 用一句概括 是"鸭子"自己就会鸭子那样的"叫声". 进一步解释 python不关注类型本身,而是关注行为:你 ...

  6. python白鹅类型_关于python鸭子类型和白鹅类型

    1,白鹅类型 白鹅类型对接口有明确定义,比如不可变序列(Sequence),需要实现__contains__,__iter__,__len__,__getitem__,__reversed__,ind ...

  7. python鸭子类型_关于鸭子类型

    其实对我来说鸭子类型一直是一个比较模糊的概念,因为平常不去关注,关注的时候一般是在面试或者被面试的时候,今天在看一篇博客的时候又有看到,所以就索性弄清楚 ``` 首先 与duck typing相对应的 ...

  8. python 鸭子类型及三大特性

    python 中一切皆对象. 先说 说面向对象语言三大特性:封装.继承.多态. 1.封装分两个层面 第一层面:创建类和对象时,分别创建两人者的名称空间,只能通过类名加"."或者ob ...

  9. python鸭子类型_1

    鸭子类型介绍 标定鸭子对象duck,有名字属性name.有走路方法walk. 而如果一个对象A,也有属性名name.有方法名walk,那这个对象A可叫做鸭子类型 python中鸭子类型的根本原因 定义 ...

最新文章

  1. hadoop之MapReduce自定义二次排序流程实例详解
  2. css设置元素继承父元素宽度_CSS设置超链接A标签宽度和高度
  3. 为了一个科研idea,博士生们连冥想、巫毒仪式都用上了|Reddit热议
  4. c#根据年份和月份获得本月最后一天
  5. c++新特性11 (10)shared_ptr一”概述“
  6. 160个Crackme039
  7. 51单片机复习:矩阵键盘
  8. Boost:内存限制的测试程序
  9. SpringBoot RequestBody ajax提交对象
  10. 移动硬盘安装Windows7
  11. leecode第三十题(串联所有单词的子串)
  12. html 层次选择器,jquery层次选择器
  13. 深入理解JVM—Java 6 JVM参数配置说明
  14. 需求跟踪矩阵和需求评审
  15. 基于web的实验室设备管理系统
  16. 阿里IoT套件 使用记录2 消息转发
  17. 找到堡垒后的目标--逆向CDN的各种方式总结(干货,附解决方案
  18. 今天在5460同学录的留言
  19. 浙江python改革_重大改革:Python 语言将被加入高考科目!
  20. 看一遍就理解:动态规划详解

热门文章

  1. PS用橡皮檫檫除图形与背景颜色一样的方法
  2. Apache OpenNLP介绍(一)
  3. 【历史】 apache catalina servlet tomcat 命名的由来
  4. 2021-03-15我的博客
  5. 详解RocketMQ中的consumer
  6. 批量安装系统工具cobbler配置
  7. 使用latex做IEEE ACCESS排版时候,解决模板作者信息之间的距离问题。
  8. Cadence PCB仿真 使用Allegro PCB SI为BRD文件创建通用型IBIS模型的方法图文教程
  9. 供配电系统中的PE、N、PEN线各指的是什么?怎么区别和使用?
  10. 推荐一款好用的CopyTranslator 翻译工具