很多人喜欢将多态多态性二者混为一谈,然后百思不得其解,其实只要分开看,就会很明朗。

一、多态

多态指的是一类事物有多种形态。(一个抽象类有多个子类,因而多态的概念依赖于继承)

比如动物有多种形态:人、狗、猪

class Animal(object):
def talk(self):
raise AttributeError('子类必须实现这个方法') class 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') peo1 = People()
pig1 = Pig()
d1 = Dog() peo1.talk()
pig1.talk()
d1.talk()

二、多态性

多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以在调用一个函数名的情况下,实现不同的功能。

在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。

也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

class Animal(object):
def talk(self):
raise AttributeError('子类必须实现这个方法') class 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') def animalTalk(obj):
obj.talk() peo = People()
pig = Pig()
dog = Dog() # 向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为
animalTalk(peo)
animalTalk(pig)
animalTalk(dog)

三、为什么要用多态性(多态性的好处)

(1)增加了程序的灵活性

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

(2)增加了程序额可扩展性

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

再次提醒:多态多态性不要混为一谈!

多态:同一种事物的多种形态,动物分为人类,猪类(在定义角度) 

多态性:一种调用方式,不同的执行效果(多态性)

本文参考:https://www.cnblogs.com/luchuangao/p/6739557.html

python 面向对象:多态和多态性的更多相关文章

  1. python基础——多态与多态性

    python基础--多态与多态性 1 多态 多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的概念依赖于继承) 1. 序列类型有多种形态:字符串,列表,元组. 2. 动物有多种形态:人, ...

  2. python基础----多态与多态性、super函数用法、继承原理

    一.多态与多态性                                                                        ㈠多态: 多态指的是一类事物有多种形态, ...

  3. python之多态与多态性

    1.多态的概念:多态指的是一类事物有多种形态,(一个抽象类有多个子类,因而多态的的概念依赖于继承) 比如:序列类型有多种形态:字符串,列表,元组 动物有多种形态:人,狗,猪 import abc cl ...

  4. Python面向对象(多态)

    day24 面向对象三大特性:多态 Python原生就是多态的.

  5. Python 的多态与多态性

    多态:是指一类事物有多种形态(!!!!定义角度!!!!) 多态性:在继承的基础上, (!!!!使用角度!!!!!) 使用多态性,实现了利用函数统一调用一个接口 多态 #多态:同一种事物的多种形态,动物 ...

  6. Python面向对象----多态和鸭子类型

    1. C#中多态实现的条件是 继承, 重写以及父类指向子类. 但是在弱类型Python里面, 实现多态的条件就显得很简洁, 只需要在子类中实现父类相同名称的方法即可. 2. 鸭子类型的解释: 若一个类 ...

  7. Python面向对象——多态

    多态的作用 调用不同的子类将会产生不同的行为. 多态是在继承上实现的. 图解多态1 图解多态2 图解多态1代码 class AudioFile: def __init__(self, filename ...

  8. python 面向对象 (多态)

    什么是多态?多态就像是人有多种心情,场景不一样心情就会不一样. class Dog: def print_self(self): print('this is dog') class Hsq(Dog) ...

  9. Python 面向对象 组合-多态与多态性-封装-property

    面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo: xxx = 111 class Bar: yyy = 222 obj = Foo( ...

  10. Python面向对象学习

    以下面例子作为面向对象基础介绍,类比java里的面向对象既可以,大同小异 class Employee(): raiseAmount=1.04 employeeNum= def __init__(se ...

随机推荐

  1. 代码图形统计工具git_stats web

    目录 一.简介 二.安装ruby 三.配置git_stats 四.通过nginx把网页展示出来 一.简介 仓库代码统计工具之一,可以按git提交人.提交次数.修改文件数.代码行数.注释量在时间维度上进 ...

  2. FFmpeg开发笔记(十):ffmpeg在ubuntu上的交叉编译移植到海思HI35xx平台

    FFmpeg和SDL开发专栏(点击传送门) 上一篇:<FFmpeg开发笔记(九):ffmpeg解码rtsp流并使用SDL同步播放>下一篇:敬请期待   前言   将ffmpeg移植到海思H ...

  3. CF1036D Vasya and Arrays 题解

    Content 给定两个长度分别为 \(n\) 和 \(m\) 的数列 \(A,B\).你需要将两个数列都恰好分成 \(k\) 份,使得两个数列中第 \(i(i\in[1,k])\) 份的元素和对应相 ...

  4. java 编程基础 Class对象 反射:代理模式和静态代理

    生活中的代理 类(对象)代理模式 代理模式是面向对象编程中比较常见的设计模式. 1. 用户只关心接口功能,而不在乎谁提供了功能.上图中接口是 Subject 2. 接口真正实现者是上图的 RealSu ...

  5. AcWing1264. 动态求连续区间和 (线段树做法)

    1.题目 给定 n 个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b] 的连续和. 输入格式 第一行包含两个整数 n 和 m,分别表示数的个数和操作次数. 第二行包含 n ...

  6. JAVA从URL参数链接中获取指定参数的值

    import java.util.HashMap; import java.util.Map; /** * @author yvioo */ public class UrlUtils { /** * ...

  7. SpringBoot启动报错:ould not be registered. A bean with that name has already been defined in file and overriding is disabled.

    SpringBoot启动报错 ***************************APPLICATION FAILED TO START*************************** Des ...

  8. LocalDateTime与Date相互转换

    LocalDateTime 转 Date LocalDateTime localDateTime=LocalDateTime.now() Date date = Date.from(localDate ...

  9. 【LeetCode】406. Queue Reconstruction by Height 解题报告(Python & C++ & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. 【LeetCode】108. Convert Sorted Array to Binary Search Tree 解题报告 (Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...