Python编程基础:第四十九节 鸭子类型Duck Typing
第四十九节 鸭子类型Duck Typing
- 前言
- 实践
前言
本节我们一起学习一个非常有趣的知识点:鸭子类型。有这么一句话:If it walks like a duck, and it quacks like a duck, then it must be a duck. 也就是说如果一个动物它走路像鸭子,叫起来也像鸭子,那它就是一只鸭子。这个逻辑怎么迁移到Python编程中呢?那就是任何对象(class),只要它们都拥有相同的方法(function),我们就可以把它们当作同样的方法去使用。
实践
我们这里先定义一个名为Duck
的类,他有两个方法,分别是walk
和sleep
:
class Duck:def walk(self):print("The duck is walking")def sleep(self):print("The duck is sleeping")
然后我们定义一个名为Tiger
的类,他也有两个方法,分别是walk
和sleep
:
class Tiger:def walk(self):print("The tiger is walking")def sleep(self):print("The tiger is sleeping")
最后,我们定义一个名为People
的类,他仍然有两个方法,分别是walk
和sleep
:
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相关推荐
- Python编程基础:第二十九节 异常Exception
第二十九节 异常Exception 前言 实践 前言 我们在写代码时不可避免地会出错,这时候编译器便会抛出异常并中断程序的执行.针对这种情况,我们可以采用异常处理的方式捕捉程序中的异常信息,并将异常信 ...
- Python编程基础:第十九节 索引Index Operator
第十九节 索引Index Operator 前言 实践 前言 我们在字符串学习过程中已经接触过索引的相关内容,我们在这里做一个小结,Python中的索引分为两部分,一种是从左向右,从0开始依次递增,例 ...
- Python编程基础:第二十五节 args参数*args
第二十五节 args参数*args 前言 实践 前言 我们目前学习到的函数的参数个数都是固定的,那么我们是否可以指定任意多个参数呢?其实是可以的,这里就用到了args参数,它可以将用户指定的任意多个参 ...
- Python编程基础:第十五节 二维列表2D Lists
第十五节 二维列表2D Lists 前言 实践 前言 列表中的元素可以是任何形式,整型.浮点型.字符串型,甚至是一个列表.当列表的元素也是列表时,我们将其称为二维列表. 实践 我们先来创建多个一维列表 ...
- Python编程基础:第十六节 元组Tuple
第十六节 元组Tuple 前言 实践 前言 我们这一节来学习一个与列表非常相似的数据结构--元组.需要注意的是元组定义好以后,其中的元素是不能改变的,并且所有元素是有序排列的, 实践 我们先来创建一个 ...
- Python编程基础:第二十六节 kwargs参数**kwargs
第二十六节 kwargs参数**kwargs 前言 实践 前言 上一节我们尝试传入任意多的参数,我们这一节来学习传入任意多具有参数名称的参数.kwargs参数将用户传入的参数打包为字典传入函数中用于进 ...
- python编程基础之二十九
栈和队列: 栈:先进后出,其他没多少特别之处了,一般可以用列表模拟栈,也可以用双端队列,封死一端. 队列:先进先出,也可以用列表模拟,但是一般用库函数,需要导collections 包:主要是为了解决 ...
- 【Python】浅谈 鸭子类型 (Duck Typing)
目录 一.来源 二.说明 三.举例 四.不足 一.来源 在程序设计中,鸭子类型 (duck typing) 是动态类型的一种风格.在此风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口, ...
- 第2章 Python编程基础知识 第2.1节 简单的Python数据类型、变量赋值及输入输出
第三节 简单的Python数据类型.变量赋值及输入输出 Python是一门解释性语言,它的执行依赖于Python提供的执行环境,前面一章介绍了Python环境安装.WINDOWS系列Python编辑和 ...
最新文章
- Babel 相关资料
- java堆设置成多少合适_jvm~xmx设置多少合适
- java_二进制的前导的零
- 论文浅尝 - TACL2020 | 改进低资源跨语言实体链接的候选生成问题
- Linux系统给进程绑核
- 对比了6家交易所的下币规则,我们发现……
- GdiPlus[33]: 基本绘图与填充命令
- ArcEngine实现pagelayout中文本元素的属性对话框
- 2018-2-13-win10-uwp-如何让WebView标识win10手机
- 图解Transformer(完整版)
- win8 安装双系统 ubuntu 过程
- Apereo CAS 5.0.3.1安装配置
- 秋招详细攻略——从准备到面试
- Maven 设置项目编码
- Failed to execute ‘btoa‘ on ‘Window‘: The string to be encoded contains characters outside of the La
- React-signature-phone 移动端电子签名
- Java使用Spire将网页保存为Word并去除Evaluation Warning水印方案
- currentFrame / totalFrames / framesLoaded
- CMMI3和CMMI5的区别
- 人生是什么?感悟3:工作不是生活的全部
热门文章
- Android程序签名打包 什么是签名,有什么用:
- 局部线性嵌入(LLE)算法matlab可运行
- Linux环境编程 用户层定时器使用一 timerfd的使用
- 服务器供电系统图,【科·堂】图解5G和数据中心电源制式
- c语言设备管理系统实训答辩,C语言设计(力学实验设备管理系统)1答辩.doc
- 科幻作文计算机,种子科幻作文
- linux下卸载 dev sd*下硬盘,Linux下硬盘操作解析
- python xgboost用法_XGBoost类库使用小结
- html5表格图片按比例缩放,JS图片等比例缩放方法完整示例
- 目标层准则层MATLAB,层次分析法-MATLAB