在程序设计中,鸭子类型(duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:

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

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为鸭的对象,并调用它的走和叫方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的走和叫方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的走和叫方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。

鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。从静态类型语言转向动态类型语言的用户通常试图添加一些静态的(在运行之前的)类型检查,从而影响了鸭子类型的益处和可伸缩性,并约束了语言的动态特性。

转载于:https://www.cnblogs.com/Matcha/p/5280599.html

鸭子类型duck typing(动态)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. [转]编程语言中的 鸭子模型(duck typing)

    在学习Python的时候发现了鸭子类型这个术语,听起来好像很有意思一样,所以把它记下来. 鸭子类型的核心概念在于一个对象的有效语义,不是继承自特定的类或者实现特定的方法,而是 由当前的属性和方法集合决 ...

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

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

  8. python与鸭子类型

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

  9. python鸭制作类代码_Python实现多态、协议和鸭子类型的代码详解

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

最新文章

  1. 自定义控件:旋转菜单
  2. NodeJs回调操作Promise化
  3. ES6中的新特性:Iterables和iterators
  4. Codeforces Round #245 (Div. 1) E. Points and Segments 欧拉回路 + 建模
  5. vim高级技巧(split)_小花_新浪博客
  6. import pyart时报错 ValueError: numpy.ndarray has the wrong size, try recompiling.
  7. 分类模型的衡量指标,召回率recall和准确率precision
  8. HDU2201 熊猫阿波的故事【概率】
  9. asp.net 中http协议及相关知识(零碎知识记录)
  10. 【Python3 爬虫】12_代理IP的使用
  11. 零基础学启发式算法(6)-蚁群算法 (Ant Colony Optimization, ACO)
  12. 071 time模块
  13. mysql左连接右连接内连接的含义_MySQL-解释左连接,右连接,内连接,全连接
  14. DS18B20温度传感器使用详解
  15. javascript实现中国地图
  16. SQL: 员工薪水中位数
  17. 毕设/私活/bigold必备项目,一个挣钱的免费的全开源标准前后端分离后台管理权限系统【springboot+vue+redis+Spring Security】脚手架搭建:若依Ruo框架具体使用教程
  18. Vue.js与Node.js一起打造一款属于自己的音乐App(收藏)
  19. 小暑 |入伏前,这样做,宝宝长高高更聪明!
  20. 用树莓派都可以DIY“波士顿机器狗”!

热门文章

  1. 跟我一起创建一个简单的javascript ajax对象 ---献给Web开发初学者
  2. javascript阻止事件冒泡和浏览器的默认行为
  3. 【网络】几种常见的协议
  4. mysql增删改查不区分大小写吗_MySQL的增删改查语句以及数据库设计的三大范式...
  5. 全栈路线_程序员该走全栈路线还是深度专家路线?
  6. 在web开发中,为什么前端比后端更得到转行程序员的青睐?
  7. 【C语言】三子棋游戏
  8. as3 转义html,html和xml中的转义字符在Flash as3中的用法浅析
  9. 光盘中删除数据如何恢复_电脑硬盘数据恢复教程,EasyRecovery软件讲解,恢复删除数据...
  10. 计算机硬盘驱动器越大,计算机基础知识1.3摘要.doc