返回顶部
首页 > 资讯 > 后端开发 > Python >Python浅析多态与鸭子类型使用实例
  • 932
分享到

Python浅析多态与鸭子类型使用实例

2024-04-02 19:04:59 932人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直接使用对象多态指的是一类事物有多种形态,比如动物有多种形

什么多态:同一事物有多种形态

为何要有多态=》多态会带来什么样的特性,多态性

  • 多态性指的是可以在不考虑对象具体类型的情况下而直接使用对象
  • 多态指的是一类事物有多种形态,比如动物有多种形态:猫、狗、猪
class Animal: #同一类事物:动物
    def talk(self):
        pass
class Cat(Animal): #动物的形态之一:猫
    def talk(self):
        print('喵喵喵')
class Dog(Animal): #动物的形态之二:狗
    def talk(self):
        print('汪汪汪')
class Pig(Animal): #动物的形态之三:猪
    def talk(self):
        print('哼哼哼')
#实例化得到三个对象
>>> cat=Cat()
>>> dog=Dog()
>>> pig=Pig()

多态性指的是可以在不用考虑对象具体类型的情况下而直接使用对象,这就需要在设计时,把对象的使用方法统一成一种:例如cat、dog、pig都是动物,但凡是动物肯定有talk方法,于是我们可以不用考虑它们三者的具体是什么类型的动物,而直接使用

>>> cat.talk()
喵喵喵
>>> dog.talk()
汪汪汪
>>> pig.talk()
哼哼哼

综上我们得知,多态性的本质在于不同的类中定义有相同的方法名,这样我们就可以不考虑类而统一用一种方式去使用对象,可以通过在父类引入抽象类的概念来硬性限制子类必须有某些方法名

import abc
# 指定metaclass属性将类设置为抽象类,抽象类本身只是用来约束子类的,不能被实例化
class Animal(metaclass=abc.ABCMeta):
    @abc.abstractmethod # 该装饰器限制子类必须定义有一个名为talk的方法
    def talk(self): # 抽象方法中无需实现具体的功能
        pass
class Cat(Animal): # 但凡继承Animal的子类都必须遵循Animal规定的标准
    def talk(self):
        pass
cat=Cat() # 若子类中没有一个名为talk的方法则会抛出异常TypeError,无法实例化

但其实我们完全可以不依赖于继承,只需要制造出外观和行为相同对象,同样可以实现不考虑对象类型而使用对象,这正是python崇尚的“鸭子类型”(duck typing):“如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子”。

比起继承的方式,鸭子类型在某种程度上实现了程序的松耦合度,如下

#二者看起来都像文件,因而就可以当文件一样去用,然而它们并没有直接的关系
class Txt: #Txt类有两个与文件类型同名的方法,即read和write
    def read(self):
        pass
    def write(self):
        pass
class Disk: #Disk类也有两个与文件类型同名的方法:read和write
    def read(self):
        pass
    def write(self):
        pass

到此这篇关于Python浅析多态与鸭子类型使用实例的文章就介绍到这了,更多相关Python多态与鸭子类型内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Python浅析多态与鸭子类型使用实例

本文链接: https://lsjlt.com/news/120763.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python浅析多态与鸭子类型使用实例
    什么多态:同一事物有多种形态 为何要有多态=》多态会带来什么样的特性,多态性 多态性指的是可以在不考虑对象具体类型的情况下而直接使用对象多态指的是一类事物有多种形态,比如动物有多种形...
    99+
    2024-04-02
  • python多态协议鸭子类型分析
    本篇内容介绍了“python多态协议鸭子类型分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接口(python 中的协议)的多种不同的实现...
    99+
    2023-06-21
  • python 多态 协议 鸭子类型详解
    接口(python 中的协议)的多种不同的实现方式即为多态。多态的作用,就是为了类在继承和派生的时候,保证使用“家谱”中任一类的实例的某一属性时的正确调用。 from abc i...
    99+
    2024-04-02
  • javascript设计模式中鸭子类型和多态怎么实现
    这篇文章主要介绍“javascript设计模式中鸭子类型和多态怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“javascript设计模式中鸭子类型和多态怎么实现”文章能帮助大家解决问题。1....
    99+
    2023-06-26
  • 详解duck typing鸭子类型程序设计与Python的实现示例
    在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。 这个概念的名字来源于由J...
    99+
    2022-06-04
    示例 鸭子 程序设计
  • Python中的鸭子类型和猴子补丁怎么使用
    本篇内容主要讲解“Python中的鸭子类型和猴子补丁怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python中的鸭子类型和猴子补丁怎么使用”吧!鸭子类型引用维基百科中的一段解释:鸭子类...
    99+
    2023-07-06
  • Python中类继承与多态的示例分析
    这篇文章主要介绍了Python中类继承与多态的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。概念类(Class): 用来描述具有相同的属性和方法的对象的集合。类变量:...
    99+
    2023-06-22
  • Python变量类型使用实例分析
    今天小编给大家分享一下Python变量类型使用实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前言:变量存储在内存中的...
    99+
    2023-06-29
  • 浅谈Go语言多态的实现与interface使用
    目录一、多态的含义二、抽象类与接口三、Golang中的接口四、总结一、多态的含义 对于Java或者是C++而言,我们在使用变量的时候,变量的类型是明确的。但是如果我们希望它可以宽松一...
    99+
    2024-04-02
  • C++多态的实现与原理及抽象类实例分析
    这篇文章主要讲解了“C++多态的实现与原理及抽象类实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++多态的实现与原理及抽象类实例分析”吧!多态的概念多态: 从字面意思来看,就是事物...
    99+
    2023-06-29
  • Python集合与字典数据类型实例分析
    这篇文章主要讲解了“Python集合与字典数据类型实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python集合与字典数据类型实例分析”吧!前言集合数据类型是没有顺序的简单对象的聚集...
    99+
    2023-06-29
  • JavaScript数据类型使用实例分析
    这篇文章主要讲解了“JavaScript数据类型使用实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JavaScript数据类型使用实例分析”吧! ...
    99+
    2024-04-02
  • C++构造函数的类型,浅拷贝与深拷贝实例分析
    本文小编为大家详细介绍“C++构造函数的类型,浅拷贝与深拷贝实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++构造函数的类型,浅拷贝与深拷贝实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、无...
    99+
    2023-06-29
  • C++ 虚拟函数深入剖析:类型擦除与多态实现
    c++++虚函数实现多态,通过类型擦除将对象类型信息分离,使编译器仅识别公共接口。虚指针表存储虚函数地址,当基类指针指向派生类对象时,指向派生类虚指针表的派生类指针将替代基类指针指向的虚...
    99+
    2024-04-29
    c++ 虚拟函数
  • Python类与实例的使用详解
    目录视频使用类和实例修改属性值视频 本课程的视频 使用类和实例 你可以使用类来模拟现实世界中的很多情景。类编写好后,你的大部分时间都将花在使用根据类创建的实例上。你需要执行的一个重要...
    99+
    2024-04-02
  • Mysql索引类型与基本用法实例分析
    本文实例讲述了Mysql索引类型与基本用法。分享给大家供大家参考,具体如下: 索引 MySQL目前主要有以下几种索引类型: 普通索引 唯一索引 主键索引 组合索引 全文索引 - 普通索引 是最...
    99+
    2022-05-17
    Mysql 索引
  • 用实例解析Mysql索引类型与基本用法
    这篇文章主要用实例解析Mysql索引类型与基本用法,内容简而易懂,希望大家可以学习一下,学习完之后肯定会有收获的,下面让小编带大家一起来看看吧。本文实例讲述了Mysql索引类型与基本用法。分享给大家供大家参...
    99+
    2024-04-02
  • 使用Golang接口类型实现参数的多态化
    使用 go 语言接口类型可以实现参数多态化,使函数或方法可以接受实现相同接口的不同类型参数,如示例中计算不同形状面积的函数 calculatearea。在实际应用中,接口类型可增强函数灵...
    99+
    2024-04-13
    golang
  • python实例方法、静态方法与类方法源码分析
    本篇内容介绍了“python实例方法、静态方法与类方法源码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成...
    99+
    2024-04-02
  • python数据类型判断type与isinstance的区别实例解析
    在项目中,我们会在每个接口验证客户端传过来的参数类型,如果验证不通过,返回给客户端“参数错误”错误码。 这样做不但便于调试,而且增加健壮性。因为客户端是可以作弊的,不要轻易相信客户端传过来的参数。 验证类...
    99+
    2022-06-04
    数据类型 实例 区别
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作