第四十九节 鸭子类型Duck Typing

  • 前言
  • 实践

前言

本节我们一起学习一个非常有趣的知识点:鸭子类型。有这么一句话:If it walks like a duck, and it quacks like a duck, then it must be a duck. 也就是说如果一个动物它走路像鸭子,叫起来也像鸭子,那它就是一只鸭子。这个逻辑怎么迁移到Python编程中呢?那就是任何对象(class),只要它们都拥有相同的方法(function),我们就可以把它们当作同样的方法去使用。

实践

我们这里先定义一个名为Duck的类,他有两个方法,分别是walksleep

class Duck:def walk(self):print("The duck is walking")def sleep(self):print("The duck is sleeping")

然后我们定义一个名为Tiger的类,他也有两个方法,分别是walksleep

class Tiger:def walk(self):print("The tiger is walking")def sleep(self):print("The tiger is sleeping")

最后,我们定义一个名为People的类,他仍然有两个方法,分别是walksleep

class People:def walk(self):print("The person is walking")def sleep(self):print("The person is sleeping")

可见,以上三个类均拥有相同名称的方法,只是具体实现不同,这符合鸭子类型的定义,我们先来将它们实例化:

duck = Duck()
tiger = Tiger()
people = People()

然后我们定义一个函数来调用这些类中的方法:

def do_something(object_):object_.walk()object_.sleep()

这里的do_something函数首先会调用对象的walk()方法,然后调用对象的sleep()方法。
我们将object_分别赋值为不同的对象来观察实验结果:

do_something(duck)
do_something(tiger)
do_something(people)
>>> The duck is walking
>>> The duck is sleeping
>>> The tiger is walking
>>> The tiger is sleeping
>>> The person is walking
>>> The person is sleeping

可见依次调用了duck、tiger、people的walk、sleep方法。

以上便是鸭子类型的全部内容,感谢大家的收藏、点赞、评论。我们下一节将介绍海象运算符(Walrus Operator),敬请期待~

Python编程基础:第四十九节 鸭子类型Duck Typing相关推荐

  1. Python编程基础:第二十九节 异常Exception

    第二十九节 异常Exception 前言 实践 前言 我们在写代码时不可避免地会出错,这时候编译器便会抛出异常并中断程序的执行.针对这种情况,我们可以采用异常处理的方式捕捉程序中的异常信息,并将异常信 ...

  2. Python编程基础:第十九节 索引Index Operator

    第十九节 索引Index Operator 前言 实践 前言 我们在字符串学习过程中已经接触过索引的相关内容,我们在这里做一个小结,Python中的索引分为两部分,一种是从左向右,从0开始依次递增,例 ...

  3. Python编程基础:第二十五节 args参数*args

    第二十五节 args参数*args 前言 实践 前言 我们目前学习到的函数的参数个数都是固定的,那么我们是否可以指定任意多个参数呢?其实是可以的,这里就用到了args参数,它可以将用户指定的任意多个参 ...

  4. Python编程基础:第十五节 二维列表2D Lists

    第十五节 二维列表2D Lists 前言 实践 前言 列表中的元素可以是任何形式,整型.浮点型.字符串型,甚至是一个列表.当列表的元素也是列表时,我们将其称为二维列表. 实践 我们先来创建多个一维列表 ...

  5. Python编程基础:第十六节 元组Tuple

    第十六节 元组Tuple 前言 实践 前言 我们这一节来学习一个与列表非常相似的数据结构--元组.需要注意的是元组定义好以后,其中的元素是不能改变的,并且所有元素是有序排列的, 实践 我们先来创建一个 ...

  6. Python编程基础:第二十六节 kwargs参数**kwargs

    第二十六节 kwargs参数**kwargs 前言 实践 前言 上一节我们尝试传入任意多的参数,我们这一节来学习传入任意多具有参数名称的参数.kwargs参数将用户传入的参数打包为字典传入函数中用于进 ...

  7. python编程基础之二十九

    栈和队列: 栈:先进后出,其他没多少特别之处了,一般可以用列表模拟栈,也可以用双端队列,封死一端. 队列:先进先出,也可以用列表模拟,但是一般用库函数,需要导collections 包:主要是为了解决 ...

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

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

  9. 第2章 Python编程基础知识 第2.1节 简单的Python数据类型、变量赋值及输入输出

    第三节 简单的Python数据类型.变量赋值及输入输出 Python是一门解释性语言,它的执行依赖于Python提供的执行环境,前面一章介绍了Python环境安装.WINDOWS系列Python编辑和 ...

最新文章

  1. Babel 相关资料
  2. java堆设置成多少合适_jvm~xmx设置多少合适
  3. java_二进制的前导的零
  4. 论文浅尝 - TACL2020 | 改进低资源跨语言实体链接的候选生成问题
  5. Linux系统给进程绑核
  6. 对比了6家交易所的下币规则,我们发现……
  7. GdiPlus[33]: 基本绘图与填充命令
  8. ArcEngine实现pagelayout中文本元素的属性对话框
  9. 2018-2-13-win10-uwp-如何让WebView标识win10手机
  10. 图解Transformer(完整版)
  11. win8 安装双系统 ubuntu 过程
  12. Apereo CAS 5.0.3.1安装配置
  13. 秋招详细攻略——从准备到面试
  14. Maven 设置项目编码
  15. Failed to execute ‘btoa‘ on ‘Window‘: The string to be encoded contains characters outside of the La
  16. React-signature-phone 移动端电子签名
  17. Java使用Spire将网页保存为Word并去除Evaluation Warning水印方案
  18. currentFrame / totalFrames / framesLoaded
  19. CMMI3和CMMI5的区别
  20. 人生是什么?感悟3:工作不是生活的全部

热门文章

  1. Android程序签名打包 什么是签名,有什么用:
  2. 局部线性嵌入(LLE)算法matlab可运行
  3. Linux环境编程 用户层定时器使用一 timerfd的使用
  4. 服务器供电系统图,【科·堂】图解5G和数据中心电源制式
  5. c语言设备管理系统实训答辩,C语言设计(力学实验设备管理系统)1答辩.doc
  6. 科幻作文计算机,种子科幻作文
  7. linux下卸载 dev sd*下硬盘,Linux下硬盘操作解析
  8. python xgboost用法_XGBoost类库使用小结
  9. html5表格图片按比例缩放,JS图片等比例缩放方法完整示例
  10. 目标层准则层MATLAB,层次分析法-MATLAB