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实现系统状态监测和故障转移实例方法
Nov 18 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
Python聊天室实例程序分享
Jan 05 Python
Python实现的文本编辑器功能示例
Jun 30 Python
深入浅出分析Python装饰器用法
Jul 28 Python
用Python写脚本,实现完全备份和增量备份的示例
Apr 29 Python
Django后台获取前端post上传的文件方法
May 28 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
解决Mac下首次安装pycharm无project interpreter的问题
Oct 29 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 Python
Python按顺序遍历并读取文件夹中文件
Apr 29 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
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
PHP使用mysql与mysqli连接Mysql数据库用法示例
2016/07/07 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
javascript radio 联动效果
2009/03/04 Javascript
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
JavaScript数值转换的三种方式总结
2014/07/31 Javascript
用javascript读取xml文件读取节点数据
2014/08/12 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
2014/08/15 Javascript
JS使用ajax方法获取指定url的head信息中指定字段值的方法
2015/03/24 Javascript
微信浏览器内置JavaScript对象WeixinJSBridge使用实例
2015/05/25 Javascript
jQuery实现的文字hover颜色渐变效果实例
2016/02/20 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
Bootstrap导航简单实现代码
2017/03/06 Javascript
vue.js实现备忘录功能的方法
2017/07/10 Javascript
使用InstantClick.js让页面提前加载200ms
2017/09/12 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
angularjs手动识别字符串中的换行符方法
2018/10/02 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
Vue.js数字输入框组件使用方法详解
2019/10/19 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
Python的Flask框架中配置多个子域名的方法讲解
2016/06/07 Python
实例讲解Python的函数闭包使用中应注意的问题
2016/06/20 Python
python 统计代码行数简单实例
2017/05/04 Python
python爬虫实战之最简单的网页爬虫教程
2017/08/13 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
测绘工程个人的自我评价
2013/11/10 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
民事调解书范文
2015/05/20 职场文书
2015年青年教师工作总结
2015/05/25 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python