到底啥是鸭子类型(duck typing)带简单例子
#百度百科鸭子类型定义
这是程序设计中的一种类型推断风格,这种风格适用于动态语言(比如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)带简单例子的更多相关文章
- 鸭子类型(Duck Typing)
		鸭子类型(Duck Typing) 动态类型.没有类型检验.不关注类型,关注方法 相当于静态类型语言的多态 这是程序设计中的一种类型推断风格,这种风格适用于动态语言(比如PHP.Python.Ruby ... 
- 鸭子类型duck typing(动态)
		在程序设计中,鸭子类型(duck typing)是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定.这个概念的名字来源于由Ja ... 
- 什么是鸭子类型(duck typing)
		"当看到一仅仅鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这仅仅鸟就能够被称为鸭子." 我们并不关心对象是什么类型,究竟是不是鸭子,仅仅关心行为. 比方在python中.有 ... 
- 鸭子类型  -  Duck Typing
		还是先看定义 duck typing, 鸭子类型是多态(polymorphism)的一种形式.在这种形式中,不管对象属于哪个, 也不管声明的具体接口是什么,只要对象实现了相应的方法,函数就可以在对象上 ... 
- 类型检查和鸭子类型 Duck typing in computer programming is an application of the duck test 鸭子测试 鸭子类型 指示编译器将类的类型检查安排在运行时而不是编译时   type checking can be specified to occur at run time rather than compile time.
		Go所提供的面向对象功能十分简洁,但却兼具了类型检查和鸭子类型两者的有点,这是何等优秀的设计啊! Duck typing in computer programming is an applicati ... 
- python鸭子类型(duck type)
		1.什么是鸭子类型顾名思义,就是看起来像鸭子的类型,就可以叫做鸭子类型所以,鸭子类型是一种不严格的类型,弱类型有相同方法的类型,可以归为一类鸭子.2.鸭子类型示例 class dog: def run ... 
- 多态 与 鸭子类型 duck duck duck
		# --> ''' 多态 与 鸭子类型 --> 什么是多态 对象的多种状态,父类对象的多种 (子类对象) 状态 --> 什么是鸭子类型: 长的像就是 1.规定有什么属性及什么方法的对 ... 
- Python 中的Duck Typing
		在学习Python的时候发现了鸭 子类型这个术语,听起来好像很有意思一样,所以把它记下来. 鸭子类型(Duck Typing)的名字来源于"鸭子测试": "当看到一只鸟走 ... 
- python与鸭子类型
		部分参考来源:作者:JasonDing https://www.jianshu.com/p/650485b78d11##s1 首先介绍下面向对象(OOP)的三大特征: (1)面向对象程序设计有三大特 ... 
随机推荐
- Linux命令——taskset
			参考:Linux taskset Command Tutorial for Beginners (with Examples) 简介 taskset命令用于设置进程(或 线程)的处理器亲和性(Proc ... 
- Maven简易笔记
			Maven笔记 Maven笔记 Maven组成 安装配置 基本概念 Maven目录的典型结构 POM文件格式 GAV 依赖 依赖管理与父项目 关于父项目的一点主意事项 repository Maven ... 
- error: invalid-first-character-of-tag-name错误解决方案
			HTML 特殊字符写法要用原始码,例如: ‘<’ 原始码为 < ‘>’ 原始码为 > 解决示例: 原错误代码 <div><</div> 修改后代码 ... 
- UVA1660 电视网络 Cable TV Network[拆点+最小割]
			题意翻译 题目大意: 给定一个n(n <= 50)个点的无向图,求它的点联通度.即最少删除多少个点,使得图不连通. 解析 网络瘤拆点最小割. 定理 最大流\(=\)最小割 感性地理解(口胡)一下 ... 
- 织梦CMS5.7主动推送二次开发
			今天一个朋友叫我写个织梦的百度主动推送插件,实现的功能是:每发表或者更新一篇文章,都会触动主动推送,达到资源最新提交给百度进行抓取. 案例站点:奇迹私服 第一步:登入FTP,在/后台的文件夹/arti ... 
- kvm创建win7虚拟机默认只识别2个cpu解决方法
			现在人在部署OpenStack之后会发现按照配额运行Linux的虚拟机没有问题,但是运行windows的虚拟机会发现如果配置2个以上的核则无法识别,windows server也最多支持到4个核.无法 ... 
- 十六.maven自动化构建protobuf代码依赖
			protobuf在序列化和反序列化中的优势: 1):序列化后体积相比Json和XML很小,适合网络传输2):支持跨平台多语言3):消息格式升级和兼容性还不错4):序列化反序列化速度很快,快于Json的 ... 
- c-free gcc.exe: cannot specify -o with -c or -S and multiple compilations的解决方法
			win10上打算使用c-free,因为xp win7时代都用过,写c代码还是比较方便的,尤其是5.0版本,但是在win10上面,c-free 5.0版本没有c-free 4好用,c-free 4启动更 ... 
- python爬取动态网页数据,详解
			原理:动态网页,即用js代码实现动态加载数据,就是可以根据用户的行为,自动访问服务器请求数据,重点就是:请求数据,那么怎么用python获取这个数据了? 浏览器请求数据方式:浏览器向服务器的api(例 ... 
- [TypeScript ] Using the Null Coalescing operator with TypeScript 3.7
			The postshows you how to use the null coalescing operator (??) instead of logical or (||) to set def ... 
