多态

什么是多态

多态指的是一类事物有多种形态

动物有多种形态:人,狗,猪

import abc
class Animal(metaclass=abc.ABCMeta): #同一类事物:动物
    @abc.abstractmethoddef talk(self):passclass People(Animal): #动物的形态之一:人def talk(self):print('say hello')class Dog(Animal): #动物的形态之二:狗def talk(self):print('say wangwang')class Pig(Animal): #动物的形态之三:猪def talk(self):print('say aoao')

文件有多种形态:文本文件,可执行文件

import abc
class File(metaclass=abc.ABCMeta): #同一类事物:文件
    @abc.abstractmethoddef click(self):passclass Text(File): #文件的形态之一:文本文件def click(self):print('open file')class ExeFile(File): #文件的形态之二:可执行文件def click(self):print('execute file')

多态性

一 什么是多态动态绑定(在继承的背景下使用时,有时也称为多态性)

多态性是指在不考虑实例类型的情况下使用实例

在面向对象方法中一般是这样表述多态性:
向不同的对象发送同一条消息(!!!obj.func():是调用了obj的方法func,又称为向obj发送了一条消息func),不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。比如:老师.下课铃响了(),学生.下课铃响了(),老师执行的是下班操作,学生执行的是放学操作,虽然二者消息一样,但是执行的效果不同

peo=People()
dog=Dog()
pig=Pig()#peo、dog、pig都是动物,只要是动物肯定有talk方法
#于是我们可以不用考虑它们三者的具体是什么类型,而直接使用
peo.talk()
dog.talk()
pig.talk()#更进一步,我们可以定义一个统一的接口来使用
def func(obj):obj.talk()

鸭子类型

逗比时刻:

  Python崇尚鸭子类型,即‘如果看起来像、叫声像而且走起路来像鸭子,那么它就是鸭子’

python程序员通常根据这种行为来编写程序。例如,如果想编写现有对象的自定义版本,可以继承该对象

也可以创建一个外观和行为像,但与它无任何关系的全新对象,后者通常用于保存程序组件的松耦合度。

例1:利用标准库中定义的各种‘与文件类似’的对象,尽管这些对象的工作方式像文件,但他们没有继承内置文件对象的方法

例2:序列类型有多种形态:字符串,列表,元组,但他们直接没有直接的继承关系

#二者都像鸭子,二者看起来都像文件,因而就可以当文件一样去用
class TxtFile:def read(self):passdef write(self):passclass DiskFile:def read(self):passdef write(self):pass

转载于:https://www.cnblogs.com/wangpanger/p/10199297.html

面向对象三大特性——多态相关推荐

  1. [.net 面向对象编程基础] (13) 面向对象三大特性——多态

    [.net 面向对象编程基础] (13) 面向对象三大特性--多态 前面两节,我们了解了面向对象的的封装和继承特性,面向对象还有一大特性就是多态.比起前面的封装和继承,多态这个概念不是那么好理解.我们 ...

  2. 面向对象三大特性-多态

    多态: python 生来支持多态 白话:一种事物的多种形态 (动物可以继承给狗,也可以继承给猫) class Animal:pass class Dog(Animal):def attack(sel ...

  3. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  4. Python OOP:面向对象三大特性(封装、继承、多态)、类属性和实例属性、类方法@classmethod、静态方法@staticmethod、函数和类callable、__call__

    一.面向对象三大特性 二.多态 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果. 一个父类,可以继承给多个子类,每个不同的子类可以创建多个对象 ...

  5. java 面向对象多态_乐字节Java面向对象三大特性以及Java多态

    ​ 以上就是本次学习的6大任务.我们依次来看. 1 Object类 Object类是所有Java类的根基类. 如果在类的声明中未使用extends关键字指明其基类,则默认基类为Object类. cla ...

  6. java 面向对象三大特性之多态 万字详解(超详细)

    目录 前言 : 一.为什么需要多态 : 1.白璧微瑕 : 2.举栗(请甘雨,刻晴,钟离吃饭): 3.代码 : 4.问题 : 二.什么是多态 : 1.定义 : 2.多态的实现步骤(重要) : 三.多态的 ...

  7. 【Python学习笔记】面向对象三大特性

    2019独角兽企业重金招聘Python工程师标准>>> ★面向对象:封装.继承和多态是面向对象的三大特点★ 面向对象编程简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元 ...

  8. python 面向对象(三大特性)

    python 面向对象(初级) (思维导图 ↑↑↑↑↑) 概述: 面向过程:根据业务逻辑从上到下垒代码. 函数式:将某功能代码封装至函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类 ...

  9. 【Python面试】 说说Python面向对象三大特性?

    往期面试题: 谈谈对 Python 和其他语言的区别? 说说 Python 解释器种类以及特点? 说说4种常用编码的区别? 废话不多说,开始今天的题目: 问:说说Python面向对象三大特性? 答:P ...

  10. python面向对象三大特性、类的约束、print带颜色输出及super补充

    面向对象三大特性.类的约束.print带颜色输出及super补充 简述: python面向对象的三大特性: 1.继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为 ...

最新文章

  1. MySQL中的RAND()函数使用详解
  2. ScrollView中的LinearLayout不能使用android:layout_heig...
  3. 想写一篇关于.net下COM工作原理的文章
  4. 论文浅尝 | 虚拟知识图谱:软件系统和应用案例综述
  5. 全排列及相关扩展算法(四)——原始中介数通过逆推求原排列算法
  6. 充分释放数据价值:安全、可信6到飞起
  7. POJ 3090 (欧拉函数) Visible Lattice Points
  8. 卡诺模型案例分析_设计师必修课:KANO 模型的讲解与案例分析
  9. python 相关系数矩阵_用numpy计算Pearson相关系数
  10. UI设计评审度量评价指导
  11. 我们都知道李、张、王、刘是四大姓氏,那么四小姓氏你知道几个?
  12. python sphinx_Python Sphinx 生成简洁大方的文档
  13. 硬件入门之: 滞回比较器分析计算
  14. PHP实现采集淘宝商品信息
  15. 2020-09-22Python爬取基金的排名信息,写入excel中方便挑选基金
  16. 红楼梦人物出场顺序统计
  17. ios 渐变透明背景_PS教程:通道抠图技巧换背景案例
  18. 第19届中国制博会如期而至,百超迪能重装亮相引关注
  19. 新闻推荐系统:基于内容的推荐算法(Recommender System:Content-based Recommendation)
  20. 编译原理之--FIRST集、FOLLOW集 和 SELECT集

热门文章

  1. CodeForces615A-Bulbs-模拟
  2. 【 javascript 】.innerHTML属性定义
  3. 2010-10-08在浏览器中兼容+jQuery3
  4. 类似于input输入框placeholder的效果,兼容ie8
  5. My前端bootstrap(一)
  6. Mine Number(搜索,暴力) ACM省赛第三届 G
  7. oracle_分区表的新增、修改、删除、合并。普通表转分区表方法
  8. usaco1.5.3(sprime)
  9. 重新认识margin-top和margin-bottom
  10. 简单搭建es6编译环境