1. 通俗解释:

之所以叫鸭子类型,是因为对于一个object来讲,如果它长得像鸭子,走路像鸭子,颜色像鸭子,那么你就可以把他当成一只鸭子

2. 在object oriental 里面的定义:

Duck Typing 更强调一个object的特征(变量,方法等)而不管它的遗传(inherit)关系

举个例子:

在这里有两个class,一个是GameCharacter,一个是Trap

他们在一定程度上有相同点,但会有一些不同的地方,而且Trap不是继承于GameCharacter的

from abc import abstractmethod
from argparse import Actionfrom sqlalchemy import false, trueclass GameCharacter:def __init__(self, row, col):self._row = rowself._col = colself._occupying = Noneself._name = Noneself._active = Trueself._character = None self._color = "\033[1;31m"#TODO: occupying getter and setter@propertydef occupying(self):return self._occupying@occupying.setterdef occupying(self, Cell):self._occupying = Celldef cmd_to_pos(self, char):
# Duck Typingfrom sqlalchemy import false, trueclass Trap:def __init__(self, row, col):self._row = rowself._col = colself._occupying = Noneself._name = "Trap"# TODO: _occupying get and setter@propertydef occupying(self):return self._occupying@occupying.setterdef occupying(self,Cell):self._occupying = Cell# TODO: _name getterdef get_name(self):return self._namedef interact_with(self, comer):...

这个时候就会有人问了:为啥不用继承呢?用重写可以让继承变得多样化

这里就涉及到Duck Typing的优点了:

3. Duck Typing 的优点

众所周知,在python中是不允许继承两个类的(不是接口),那如果一个类需要多个类的特征呢?这里就要用到duck typing了。这样虽然Trap不是继承于GameCharacter,但是它却可以拥有包括GameCharacter在内的其他的类的特征——提高了多样性。

Duck Typing (鸭子类型)详解相关推荐

  1. java实现鸭子类型,Golang的interface及duck typing鸭子类型

    Golang的interface及duck typing鸭子类型 "当看到一只鸟走起来像鸭子.游泳起来像鸭子.叫起来也像鸭子,那么这只鸟就可以被称为鸭子." 意思就是: 一个东西究 ...

  2. python鸭制作类代码_Python动态语言与鸭子类型详解

    今天来说说编程语言中的动态类型语言与鸭子类型. 动态语言 维基百科对动态语言的定义: 动态编程语言是一类在运行时可以改变其结构的语言:例如新的函数.对象.甚至代码可以被引进,已有的函数可以被删除或是其 ...

  3. python鸭制作类代码_详解duck typing鸭子类型程序设计与Python的实现示例

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

  4. python动态类型的坑_python进阶教程之动态类型详解

    动态类型(dynamic typing)是Python另一个重要的核心概念.我们之前说过,Python的变量(variable)不需要声明,而在赋值时,变量可以重新赋值为任意值.这些都与动态类型的概念 ...

  5. java原生类型没有封装_Java基本数据类型与封装类型详解(int和Integer区别)

    Java基本数据类型与封装类型详解(int和Integer区别) 发布于 2020-4-19| 复制链接 摘记: int是java提供的8种原始数据类型之一.Java为每个原始类型提供了封装类,Int ...

  6. python变量类型-Python 变量类型详解

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整 ...

  7. mysql数据库的字符串表示什么意思_MySQL数据库的字符串类型详解(01)

    Mysql的数据类型主要分为三类:数字类型.字符串(字符)类型.日期和时间类型,由于时间紧迫,根据学习的需要 数字类型暂不做详解,等待有时间了在修改此文档,此文主要介绍mysql 数据类型中的字符串类 ...

  8. 并发编程-04线程安全性之原子性Atomic包的4种类型详解

    文章目录 线程安全性文章索引 脑图 概述 原子更新基本类型 Demo AtomicBoolean 场景举例 原子更新数组 Demo 原子更新引用类型 Demo 原子更新字段类型 使用注意事项: Dem ...

  9. python内置序列类型_Python序列内置类型之元组类型详解

    Python序列内置类型之元组类型详解 1.元祖的概念 Python中的元组与列表类似,都是一个序列,不同的是元组的元素不能修改而已. 2.元组的创建 元组使用小括号,列表使用方括号. tup = ( ...

最新文章

  1. LINUX下用C语言历遍目录 C语言列出目录
  2. C#部署安装,将用户安装路径记录下写入注册表,并启动
  3. 将Apache添加为Linux的服务 实现自启动
  4. dot pairs 点_Dott入局欧洲共享单车市场 明年3月伦敦巴黎推出
  5. mysql命令行cmd_CMD命令行操作MySQL
  6. java届的黄埔军校_法学界的“黄埔军校”:拒绝与985合并,是其最大遗憾
  7. 窗口封装类与Windows窗口实例的关系-3、CWnd如何处理窗口消息
  8. win10安装jdk
  9. html气泡写法,制作CSS气泡框
  10. feedburner怎么用_FeedBurner 不能用了,还有 FeedSky,附个相关插件
  11. 关于物联网,互联网我们用到的通信
  12. unreal4 分辨率设置
  13. C-C++学生成绩管理系统
  14. Java设计模式的一些积累
  15. PV UV IP的意义
  16. 硬件产品开发:外包五要素和外包地图
  17. Windows系统查看设备序列号及硬盘序列号
  18. 好工具分享:CxImage图片无损批量压缩大师
  19. SNMP实验(需要snmpb)
  20. 误删桌面计算机图标win10,win10此电脑图标误删

热门文章

  1. 3.MyBatis源码解析-CRUD执行流程--阿呆中二
  2. linux+rel+安装教程,pika安装教程
  3. hdu5514Frogs
  4. LuoguP1710 地铁涨价
  5. 旺店通与金蝶集成解决方案
  6. android sqlite存对象,【Android基础】Android SQLite存储自定义对象
  7. HDFS 关闭安全模式
  8. Android 中文字符转UTF-8编码
  9. 看完这篇Java基础,你也是天花板
  10. python3-基础篇-02-输入输出、注释