#百度百科鸭子类型定义

这是程序设计中的一种类型推断风格,这种风格适用于动态语言(比如PHP、Python、Ruby、Typescript、Perl、Objective-C、Lua、Julia、JavaScript、Java、Groovy、C#等)和某些静态语言(比如Golang,一般来说,静态类型语言在编译时便已确定了变量的类型,但是Golang的实现是:在编译时推断变量的类型),支持"鸭子类型"的语言的解释器/编译器将会在解析(Parse)或编译时,推断对象的类型。

这个解释很抽象,又拗口,最讨厌看这些解释了

#容易看懂的定义

其实动态语言是相对静态语言而言的,静态语言的特点是在程序执行前,代码编译时从代码中就可以知道一切,比如变量的类型,方法的返回值类型:

String s = "hello"

s = "world"

s = 1// 编译时就会报错

在静态语言中,变量有类型信息,它是一块内存区域,静态语言的优点是代码结构非常规范,便于调试,但有时显得啰嗦。

而动态语言只有等到程序运行时才知道一切,变量(严格来说叫名字,就像人的名字一样)不需要指定类型,变量本身没有任何类型信息,类型信息在对象身上,对象是什么类型,必须等到程序运行时才知道,动态类型语言的优点在于方便阅读,不需要写很多类型相关的代码;缺点是不方便调试,命名不规范时会造成读不懂,不利于理解等。

s = "hello"

s = "world"

s = 1# 可以给变量随意赋值,无论是什么类型都可以鸭子类型

动态语言中经常提到鸭子类型,所谓鸭子类型就是:如果走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子(If it walks like a duck and quacks like a duck, it must be a duck)。鸭子类型是编程语言中动态类型语言中的一种设计风格,一个对象的特征不是由父类决定,而是通过对象的方法决定的。

#看个例子

这里面

鸭子自然会嘎嘎的叫

小鸟也会叫,这鸟叫声跟鸭子叫声很类似, 哇哇啾啾

小狗也会叫,这狗叫声跟鸭子叫声也很类似,哇哇

既然叫声都很类似,那就认为它们都是鸭子,直接指鸟为鸭,指狗为鸭,

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

#小扩展

如果你学的是Java或者C++等静态语言,可能对鸭子类型的理解没那么深刻,因为静态语言中对象的特性取决于其父类。

而动态语言则不一样,比如迭代器,任何实现了 __iter__ 和 __next__ 方法的对象都可称之为迭代器,但对象本身是什么类型不受限制,可以自定义为任何类

鸭子类型依赖文档、清晰的代码和测试来确保正确使用 。这既是优点也是缺点,缺点是需要通过文档才能知道参数类型,为了弥补这方面的不足,Python3.6 引入了类型信息,定义变量的时候可以指定类型

#参考

https://www.sohu.com/a/169574908_776230

https://blog.csdn.net/IAlexanderI/article/details/80266300

duck typing java_到底啥是鸭子类型(duck typing)带简单例子相关推荐

  1. duck typing java_编程语言中的鸭子类型 Duck Typing

    来源 | https://segmentfault.com/a/1190000019607240 1.什么是鸭子类型(duck typing) 百度百科是这样解释的: 这是程序设计中的一种类型推断风格 ...

  2. 【Python】浅谈 鸭子类型 (Duck Typing)

    目录 一.来源 二.说明 三.举例 四.不足 一.来源 在程序设计中,鸭子类型 (duck typing) 是动态类型的一种风格.在此风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口, ...

  3. Python编程基础:第四十九节 鸭子类型Duck Typing

    第四十九节 鸭子类型Duck Typing 前言 实践 前言 本节我们一起学习一个非常有趣的知识点:鸭子类型.有这么一句话:If it walks like a duck, and it quacks ...

  4. Python笔记 · 鸭子类型 / Duck Typing

    1. 问题的由来 我初次意识到鸭子类型的存在是在学习Sklearn时,在<Hands-On Machine Learing>一书的第二章,作者提供了一个自定义的Tansformer,使用自 ...

  5. 编程语言中的鸭子类型 Duck Typing

    来源 | https://segmentfault.com/a/1190000019607240 1.什么是鸭子类型(duck typing) 百度百科是这样解释的: 这是程序设计中的一种类型推断风格 ...

  6. 鸭子类型duck typing(动态)

    在程序设计中,鸭子类型(duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定.这个概念的名字来源于由Ja ...

  7. Python学习笔记——鸭子类型(duck typing)

    前言 在实习期间,由于工作需要首次接触了Python这门语言,由于学习和使用的时间非常短,所以当时认为,作为一门解释性语言,在做Web开发方面,Python和PHP的差别不大,甚至在一些应用场景上没有 ...

  8. python有多态特性吗_Python:多态、协议和鸭子类型

    多态 问起面向对象的三大特性,几乎每个人都能对答如流:封装.继承.多态.今天我们就要来说一说 Python 中的多态. 所谓多态:就是指一个类实例的相同方法在不同情形有不同表现形式.多态机制使具有不同 ...

  9. python与鸭子类型

    目录 1.面向对象(OOP)的三大特征 2.静态类型语言和动态类型语言的区别 3.面向接口编程 4.鸭子类型 5.python中的多态 1.面向对象(OOP)的三大特征 (1)面向对象程序设计有三大特 ...

最新文章

  1. 遥感计算机分类的基本原理,遥感数字图像的计算机分类
  2. 用InstallShield 打包工具 打 Win32 程序 (depends.exe 用看程序都依赖了哪些dll)
  3. 使用Vue时localhost:8080中localhost换成ip地址后无法显示页面的问题
  4. python - 线程
  5. Delphi - 对象构造浅析后续
  6. 对于防止匿名评论/访问的操作
  7. 撒花!PyTorch 官方教程中文版正式上线,激动人心的大好事!
  8. c++读二进制文件结束的时候总会异常_python专题文件操作
  9. Ambari中Ranger安装
  10. 警告warningC4018有符号/无符号不匹配
  11. 日期 java cal,日期系列教材 (三)- 如何使用Java的Calendar类
  12. Linux系统日常维护命令
  13. Jenkins 流水线 获取git 分支列表_持续集成工具Jenkins看这篇就够啦!
  14. JCheckBox 默认选择_了解GoldWave使用习惯的一些默认设置
  15. 基于VUE,VUX组件开发的网易新闻页面搭建过程
  16. python自动化输入文本_快速掌握Python Selenium Web自动化:)四、使用Selenium在网页上进行操作...
  17. 统计学_显著性检验综述
  18. 注册表禁用计算机管理,解除封锁注册表被禁用的几种解决办法
  19. Nebula 分布式图数据库介绍
  20. IDEA使用破解补丁永久激活

热门文章

  1. Android高德地图自定义地图指南针
  2. 解密dlink固件(四)
  3. python pika 消费mq basic_get方法
  4. JavaCompiler
  5. HuaWei ❀ BGP GR与NSR
  6. mysql概念模型,什么是数据库概念模型
  7. 使用jQuery与后端进行数据传输代码示例
  8. 解决《使命召唤:战区2.0》遇到的Windows10版本号不匹配问题,一并解决Windows10更新失败:UEFI固件受限问题
  9. idea设置代码提示
  10. 2022/12/1 组会