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 相关文章推荐
使用Django的模版来配合字符串翻译工作
Jul 27 Python
Python实现约瑟夫环问题的方法
May 03 Python
使用Python的SymPy库解决数学运算问题的方法
Mar 27 Python
Ubuntu18.04中Python2.7与Python3.6环境切换
Jun 14 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
Aug 13 Python
Python any()函数的使用方法
Oct 28 Python
在Tensorflow中实现梯度下降法更新参数值
Jan 23 Python
tensorflow之tf.record实现存浮点数数组
Feb 17 Python
Python 创建TCP服务器的方法
Jul 28 Python
python openssl模块安装及用法
Dec 06 Python
Python基础之元类详解
Apr 29 Python
解决pytorch读取自制数据集出现过的问题
May 31 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
解析crontab php自动运行的方法
2013/06/24 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
Javascript冒泡排序算法详解
2014/12/03 Javascript
node.js中的path.normalize方法使用说明
2014/12/08 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
jquery ztree实现模糊搜索功能
2016/02/25 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
JSON 数据详解及实例代码分析
2017/01/20 Javascript
整理关于Bootstrap排版的慕课笔记
2017/03/29 Javascript
纯js实现动态时间显示
2020/09/07 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
JS在if中的强制类型转换方式
2018/07/15 Javascript
微信小程序开发问题之wx.previewImage
2018/12/25 Javascript
小程序实现短信登录倒计时
2019/07/12 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
Python错误提示:[Errno 24] Too many open files的分析与解决
2017/02/16 Python
python登录WeChat 实现自动回复实例详解
2019/05/28 Python
django中forms组件的使用与注意
2019/07/08 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
html5超简单的localStorage实现记住密码的功能实现
2017/09/07 HTML / CSS
详解如何解决canvas图片getImageData,toDataURL跨域问题
2018/09/17 HTML / CSS
美国在线鲜花速递:ProFlowers
2017/01/05 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
护理学毕业生求职信
2013/11/14 职场文书
学生意外伤害赔偿协议书
2014/09/17 职场文书
建议书的格式及范文
2015/09/14 职场文书
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
《吸血鬼:避世 血猎》官宣4.27发售 系列首款大逃杀
2022/04/03 其他游戏
Nginx 常用配置
2022/05/15 Servers
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL