Python面向对象之多态原理与用法案例分析


Posted in Python onDecember 30, 2019

本文实例讲述了Python面向对象之多态原理与用法。分享给大家供大家参考,具体如下:

目标

多态

面向对象三大特性

封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中
定义类的准则
继承 实现代码的重用,相同的代码不需要重复的编写
设计类的技巧
子类针对自己特有的需求,编写特定的代码
多态 不同的 子类对象 调用相同的 父类方法,产生不同的执行结果

多态 可以 增加代码的灵活度
以 继承 和 重写父类方法 为前提
是调用方法的技巧,不会影响到类的内部设计
Python面向对象之多态原理与用法案例分析

多态案例演练

需求

1.在 Dog 类中封装方法 game
普通狗只是简单的玩耍
2.定义 XiaoTianDog 继承自 Dog,并且重写 game 方法
哮天犬需要在天上玩耍
3.定义 Person 类,并且封装一个 和狗玩 的方法
在方法内部,直接让 狗对象 调用 game 方法
Python面向对象之多态原理与用法案例分析
案例小结

Person 类中只需要让 狗对象 调用 game 方法,而不关心具体是 什么狗
game 方法是在 Dog 父类中定义的
在程序执行时,传入不同的 狗对象 实参,就会产生不同的执行效果
多态 更容易编写出出通用的代码,做出通用的编程,以适应需求的不断变化!

class Dog(object):

  def __init__(self, name):
    self.name = name

  def game(self):
    print("%s 蹦蹦跳跳的玩耍..." % self.name)


class XiaoTianDog(Dog):

  def game(self):
    print("%s 飞到天上去玩耍..." % self.name)


class Person(object):

  def __init__(self, name):
    self.name = name

  def game_with_dog(self, dog):

    print("%s 和 %s 快乐的玩耍..." % (self.name, dog.name))

    # 让狗玩耍
    dog.game()


# 1. 创建一个狗对象
# wangcai = Dog("旺财")
wangcai = XiaoTianDog("飞天旺财")

# 2. 创建一个小明对象
xiaoming = Person("小明")

# 3. 让小明调用和狗玩的方法
xiaoming.game_with_dog(wangcai)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python实现数独算法实例
Jun 09 Python
Python读取网页内容的方法
Jul 30 Python
Python编写合并字典并实现敏感目录的小脚本
Feb 26 Python
解决Python中回文数和质数的问题
Nov 24 Python
pandas的相关系数与协方差实例
Dec 27 Python
flask 框架操作MySQL数据库简单示例
Feb 02 Python
Python定义函数实现累计求和操作
May 03 Python
Django如何批量创建Model
Sep 01 Python
Django修改app名称和数据表迁移方案实现
Sep 17 Python
Python基础之Socket通信原理
Apr 22 Python
Python编写可视化界面的全过程(Python+PyCharm+PyQt)
May 17 Python
python 算法题——快乐数的多种解法
May 27 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 #Python
python面向对象之类属性和类方法案例分析
Dec 30 #Python
基于Python执行dos命令并获取输出的结果
Dec 30 #Python
python实现的批量分析xml标签中各个类别个数功能示例
Dec 30 #Python
python实现修改固定模式的字符串内容操作示例
Dec 30 #Python
python基于celery实现异步任务周期任务定时任务
Dec 30 #Python
Django框架之中间件MiddleWare的实现
Dec 30 #Python
You might like
也谈截取首页新闻 - 范例
2006/10/09 PHP
PHP foreach循环使用详解与实例代码
2010/05/08 PHP
js location.replace与location.reload的区别
2010/09/08 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
JavaScript按位运算符的应用简析
2014/02/04 Javascript
ionic实现可滑动的tab选项卡切换效果
2020/04/15 Javascript
vue项目环境变量配置的实现方法
2018/10/12 Javascript
vue中导出Excel表格的实现代码
2018/10/18 Javascript
利用jsonp解决js读取本地json跨域的问题
2018/12/11 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
微信小程序 checkbox使用实例解析
2019/09/09 Javascript
用vue 实现手机触屏滑动功能
2020/05/28 Javascript
Python实现大文件排序的方法
2015/07/10 Python
python web框架学习笔记
2016/05/03 Python
Python安装使用命令行交互模块pexpect的基础教程
2016/05/12 Python
Python生成密码库功能示例
2017/05/23 Python
你真的了解Python的random模块吗?
2017/12/12 Python
运行django项目指定IP和端口的方法
2018/05/14 Python
Python调用百度根据经纬度查询地址的示例代码
2019/07/07 Python
python BlockingScheduler定时任务及其他方式的实现
2019/09/19 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
基于TensorBoard中graph模块图结构分析
2020/02/15 Python
Django如何使用redis作为缓存
2020/05/21 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
css3的过滤效果简单实例
2016/08/03 HTML / CSS
基于HTML5的齿轮动画特效
2016/02/29 HTML / CSS
文明宿舍获奖感言
2014/02/07 职场文书
大学生学期自我鉴定
2014/03/19 职场文书
倡导文明标语
2014/06/16 职场文书
2015年教师新年寄语
2014/12/08 职场文书
复活读书笔记
2015/06/29 职场文书
导游词之贵州百里杜鹃
2019/10/29 职场文书
win10安装配置nginx的过程
2021/03/31 Servers
MySQL 逻辑备份 into outfile
2022/05/15 MySQL
MySQL GTID复制的具体使用
2022/05/20 MySQL
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android