一、多态

Python中多态是指一类事物有多种形态。比如动物有多种形态,人,狗,猫,等等。文件有多种形态:文本文件,可执行文件。

二、多态性

1.什么是多态性?

多态性是指在不考虑实例类型的情况下使用实例,多态性分为静态多态性和动态多态性

  • 静态多态性:如任何类型都可以用运算符+进行运算

  • 动态多态性:如下

import abcclass Animals(metaclass=abc.ABCMeta):@abc.abstractmethoddef talk(self):passclass People(Animals):def talk(self):print('People is talking')class Cat(Animals):def talk(self):print('Cat is miaomiao')class Dog(Animals):def talk(self):print('Dog is wangwang')cat1 = Cat()
dog1 = Dog()
peo1 = People()
# peo、dog、pig都是动物,只要是动物肯定有talk方法
# 于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo1.talk()
dog1.talk()
peo1.talk()# 定义一个统一的接口来访问
def func(obj):obj.talk()func(cat1)

2.为什么要用多态性?

①增加了程序的灵活性

以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(animal)

②增加了程序额可扩展性

通过继承animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(animal)去调用

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Pig(Animals):  # 属于动物的另外一种形态:猪def talk(self):print('Pig is huohuo')pig = Pig()# 统一接口,对于使用者来说,自己的代码根本无需改动
def func(obj):obj.talk()func(pig)  # 甚至连调用方式都无需改变,就能调用出pig的talk功能

三、鸭子类型

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

例如,在不使用鸭子类型的语言中,我们可以编写一个函数,它接受一个类型为"鸭子"的对象,并调用它的"走"和"叫"方法。在使用鸭子类型的语言中,这样的一个函数可以接受一个任意类型的对象,并调用它的"走"和"叫"方法。如果这些需要被调用的方法不存在,那么将引发一个运行时错误。任何拥有这样的正确的"走"和"叫"方法的对象都可被函数接受的这种行为引出了以上表述,这种决定类型的方式因此得名。

鸭子类型通常得益于不测试方法和函数中参数的类型,而是依赖文档、清晰的代码和测试来确保正确使用。

class Duck():def walk(self):print('I walk like a duck')def swim(self):print('i swim like a duck')class Person():def walk(self):print('this one walk like a duck') def swim(self):print('this man swim like a duck')

可以很明显的看出,Person类拥有跟Duck类一样的方法,当有一个函数调用Duck类,并利用到了两个方法walk()和swim()。我们传入Person类也一样可以运行,函数并不会检查对象的类型是不是Duck,只要他拥有walk()和swim()方法,就可以正确的被调用。

再举例,如果一个对象实现了__getitem__方法,那python的解释器就会把它当做一个collection,就可以在这个对象上使用切片,获取子项等方法;如果一个对象实现了__iter__和next方法,python就会认为它是一个iterator,就可以在这个对象上通过循环来获取各个子项。

Python教程:多态与多态性相关推荐

  1. Python类的多态和多态性

    很多人喜欢将多态与多态性二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗. 一.多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 序列数据类型有多种形态 ...

  2. python中对多态和多态性的理解

    一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal(metaclass=abc. ...

  3. 对python中多态详细教程

    一.多态 多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等.(一个抽象类有多个子类,因而多态的概念依赖于继承) import abc class Animal(metaclass=abc. ...

  4. python面向对象:多态与多态性

    多态 多态指的是一类事物有多种形态,比如 动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.ABCMeta): #同一类事物:动物@abc.abs ...

  5. 廖的python教程_廖雪峰的Python3.x教程.pdf

    目录 Python教程 Python简介 安装Python Python解释器 第一个Python程序 使用文本编辑器 Python代码运行助手 输入和输出 源码 learning.py Python ...

  6. python教程廖雪峰云-Python3基础教程-廖雪峰[带标签完整版]

    标签: Python教程... 5 Python简介... 7 安装Python. 12 Python解释器... 16 第一个Python程序... 18 使用文本编辑器... 19 Python代 ...

  7. 四全集学python选哪种电脑_“Python教程哪个版本最适合学习?“python教程全集

    python教程,求一套比较好的python教程 好不好主要先看你自己,理解能力样,有没有接触过编程,有没础,这很重要: 看教程,能不能先给你建立起知识体系框架,许多教程一上来就直接给你灌输知识很让人 ...

  8. 关于python中多态的理解。

    学习到多态的时候,不确定自己是否完全理解了python的多态,于是Google观看了众多资料和文献,发现很多编程大佬讲得过于抽象,不便于新手理解,这违背了python的初衷:简单. 所以我在此用通俗一 ...

  9. Day20:绑定方法与非绑定办法、多态和多态性

    一.绑定方法与非绑定方法 类中定义的函数分成两大类: 1.绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法. 为类量身定 ...

最新文章

  1. python3 判断进程是否存在
  2. 北大计算机科学与技术专业河南录取分数线,北京大学河南录取分数线|2021北京大学河南分数线|2021年北京大学河南高考分数线|2021年北京大学河南招生计划录取人数...
  3. SparkSQL-从0到1认识Catalyst
  4. python中返回值为ture表达式_python return逻辑判断表达式(21)|python教程|python入门|python教程...
  5. javaScript一种优化模式-初始化时分支
  6. c# datagridview 中DataSource的使用总结
  7. c语言表达式1 33的值是,2015年计算机二级C语言测试题及答案(1)
  8. mis是商科还是计算机专业,MIS是什么?管理信息系统MIS和计算机科学CS有什么区别?...
  9. @hapi/joi 报错 “message“: “Cannot mix different versions of joi schemas“
  10. English——slang about body
  11. 华安基金高管事发 基金业突遇“公信力寒流”(ZT)
  12. eclipse注释出现问号
  13. php 指定大小缩略图片
  14. 一个很好的Git操作指南
  15. 中微SC8F5771模拟IIC通信——指令运行速度的探索(附编译软件与烧录软件)
  16. linux shell编程 ppt,Linux常用命令与Shell基本编程.ppt
  17. Ubuntu 下面的aMule 的 Kad 或者 Ed2k 连不上
  18. 1G内存与512M内存?AMD系统性能大比较(转)
  19. win10系统休眠文件删除
  20. python毕业设计作品基于django框架校园排课选课系统毕设成品(3)后台管理功能

热门文章

  1. Go语言TCP Socket编程
  2. centos 磁盘扩容,新建lv
  3. 基于模板引擎的代码生成器Smart Code预览
  4. VS2005 宽字符 unicode字符集和多字节字符集
  5. 【学习笔记】3、Jupyter Notebook无法打开问题处理
  6. COND SWITCH 操作符
  7. 谈一个优秀的美工需要掌握哪些技能
  8. 互联网经济与实体经济
  9. abap--关于sap地址,传真,邮箱的地址读取
  10. SAP潜入移动安全阵地 后ERP发展方向