1、Python中的多态

(1)多态的定义

多态是一种使用对象的方式,子类重写父类方法,不同的子类对象调用相同的父类方法,可以产生不同的执行结果。

概括的说,多态指的是一类事物可以有多种形态呈现。

(2)多态的好处

  • 增加了程序额可扩展性,只要觉有相同的特征,就可以创建一个新的类,使用者无需更改原有类的代码,更容易编写出通用的代码,做出通用的编程。
  • 有了多态,增加了程序的调用灵活性,以不变应万变,不论对象千变万化,使用者都是同一种形式去调用。
  • 支持面向对象的“开闭”原则。
    • 对扩展开放(Open for extension):允许子类重写方法进行扩展。
    • 对修改封闭(Closed for modification):不重写,继承父类方法,直接使用。

(3)多态实现步骤

  1. Python中实现多态的两个前提条件:

    • 继承:多态一定是发生在子类和父类之间。
    • 重写:子类重写了父类的方法。
  2. 多态实现步骤
    • 定义父类,并提供公共方法。
    • 定义子类,并重写父类方法。
    • 传递子类对象给调用者,可以看到不同子类执行效果不同。

2、体验多态

# 1. 定义父类,提供公共方法
class Dog(object):
# 父类提供统一的方法,哪怕是空方法
def work(self):
pass # 2. 定义子类,继承Dog类
# 子类重写父类方法:
# 定义2个类表示不同的警犬
class ArmyDog(Dog):
def work(self):
print('追击敌人...') class DrugDog(Dog):
def work(self):
print('追查毒品...') # 定义人类
class Person(object):
# 传入不同的对象,执行不同的代码,即调用不同的work函数
def work_with_dog(self, dog):
dog.work() # 3. 创建对象,
# (有多少个事物,就有要创建多少个对象)
ad = ArmyDog()
dd = DrugDog() # 4.传入不同的对象,调用不同的功能,
obj = Person()
obj.work_with_dog(ad)
obj.work_with_dog(dd)

总结:

Java中多态性的表现: 多态性,可以理解为一个事物的多种形态。同样Python中也支持多态,但是是有限的的支持多态性,主要是因为Python中变量的使用不用声明,所以不存在父类引用指向子类对象的多态体现,同时Python不支持重载,所以在Python中 多态的使用不如Java中那么明显。

参考:https://blog.csdn.net/qq_26442553/article/details/81776699

『无为则无心』Python面向对象 — 56、Python多态的更多相关文章

  1. 『无为则无心』Python面向对象 — 51、私有成员变量(类中数据的封装)

    目录 1.私有成员变量介绍 (1)私有成员变量概念 (2)私有成员变量特点 (3)私有成员变量体验 2.属性私有化工作原理 3.定义成员变量的标识符规范 4.私有成员变量的获取和设置方式 1.私有成员 ...

  2. 『无为则无心』Python面向对象 — 53、对Python中封装的介绍

    目录 1.继承的概念 2.继承的好处 3.继承体验 4.单继承 5.多继承 1.继承的概念 在Python中,如果两个类存在父子级别的继承关系,子类中即便没有任何属性和方法,此时创建一个子类对象,那么 ...

  3. 『无为则无心』Python基础 — 4、Python代码常用调试工具

    目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...

  4. 『无为则无心』Python基础 — 6、Python的注释

    目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...

  5. 『无为则无心』Python基础 — 7、Python的变量

    目录 1.变量的定义 2.Python变量说明 3.Python中定义变量 (1)定义语法 (2)标识符定义规则 (3)内置关键字 (4)标识符命名习惯 4.使用变量 1.变量的定义 程序中,数据都是 ...

  6. 『无为则无心』Python基础 — 10、Python字符串的格式化输出

    目录 1.什么是格式化输出 2.Python格式化输出的五种方式 方式一:字符串之间用+号拼接 方式二:print()函数可同时输出多个字符串 方式三:占位符方式 方式四:f格式化方式(推荐) 方式五 ...

  7. 『无为则无心』Python基础 — 12、Python运算符详细介绍

    目录 1.表达式介绍 2.运算符 (1)运算符的分类 (2)算数运算符 (3)赋值运算符 (4)复合赋值运算符 (5)比较运算符 3.逻辑运算符 拓展1:数字之间的逻辑运算 拓展2:Python中逻辑 ...

  8. 『无为则无心』Python序列 — 24、Python序列的推导式

    目录 1.列表推导式 (1)快速体验 (2)带if的列表推导式 (3)多个for循环实现列表推导式 2.字典推导式 (1)创建一个字典 (2)将两个列表合并为一个字典 (3)提取字典中目标数据 3.集 ...

  9. 『无为则无心』Python函数 — 29、Python变量和参数传递

    目录 1.Python的变量 (1)Python变量不能独立存在 (2)变量是内存中数据的引用 (3)注意点 2.了解变量的引用 3.Python的参数传递(重点) (1)示例 (2)结论 (3)总结 ...

随机推荐

  1. Android官方文档翻译 十二 3.Supporting Different Devices

    Supporting Different Devices 支持不同设备 Dependencies and prerequisites 依赖关系和先决条件 Android 1.6 or higher A ...

  2. 『德不孤』Pytest框架 — 2、Pytest的基本使用

    目录 1.Pytest安装 2.Pytest常用插件 3.Pytest运行的第一个例子 4.Pytest框架的运行方式 5.在PyCharm中以Pytest的方式运行测试用例 1.Pytest安装 C ...

  3. python中grpc配置asyncio使用

    python中grpc配置asyncio使用 安装grpclib pip3 install grpclib protoc编译.proto文件,生成源码文件 python -m grpc_tools.p ...

  4. golang中的pair

    package main import "fmt" type Reader interface { ReadBook() } type Writer interface { Wri ...

  5. Servlet-整个Servlet类的继承体系

  6. React 世界的一等公民 - 组件

    猪齿鱼Choerodon平台使用 React 作为前端应用框架,对前端的展示做了一定的封装和处理,并配套提供了前端组件库Choerodon UI.结合实际业务情况,不断对组件优化设计,提高代码质量. ...

  7. Java多线程专题5: JUC, 锁

    合集目录 Java多线程专题5: JUC, 锁 什么是可重入锁.公平锁.非公平锁.独占锁.共享锁 可重入锁 ReentrantLock A ReentrantLock is owned by the ...

  8. 图论+回溯解QQ一笔画红包

    [春节整活] QQ的一笔画红包有几个特性: 1.最大为5×5的点阵,所以可以把每个点从左到右,从上到下标为1-25号点 2.每两个点只能存在一条线 3.线可以被盖住(例如连接2-1-3,2-1的线会被 ...

  9. 计算机网络再次整理————socket[一]

    前言 以前也整理过吧,写了几篇之后,感觉没啥整理的必要了然后就放弃了,最近又想整理一下. 正文 这篇对应的是:https://www.cnblogs.com/aoximin/p/12235333.ht ...

  10. List去重复

    HashSet hs = new HashSet(li1); //此时已经去掉重复的数据保存在hashset中 HashSet不能给cbx.datasource赋值,要转成list再赋值 List t ...