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 30 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
matplotlib作图添加表格实例代码
Jan 23 Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 Python
python的concat等多种用法详解
Nov 28 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
使用PyQtGraph绘制精美的股票行情K线图的示例代码
Mar 14 Python
python交互模式下输入换行/输入多行命令的方法
Jul 02 Python
Python3 翻转二叉树的实现
Sep 30 Python
python十进制转二进制的详解
Feb 07 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
Jan 27 Python
教你怎么用Python selenium操作浏览器对象的基础API
Jun 23 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
php Notice: Undefined index 错误提示解决方法
2010/08/29 PHP
PHP中=赋值操作符对不同数据类型的不同行为
2011/01/02 PHP
模板引擎正则表达式调试小技巧
2011/07/20 PHP
CI框架中zip类应用示例
2014/06/17 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
javascript的事件描述
2006/09/08 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
JS仿百度搜索自动提示框匹配查询功能
2013/11/21 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
JS原型链 详解及示例代码
2016/09/06 Javascript
vue2.0开发实践总结之疑难篇
2016/12/07 Javascript
JavaScript表单验证完美代码
2017/03/02 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
详解wow.js中各种特效对应的类名
2017/09/13 Javascript
详解.vue文件中监听input输入事件(oninput)
2017/09/19 Javascript
vue完成项目后,打包成静态文件的方法
2018/09/03 Javascript
JavaScript 俄罗斯方块游戏实现方法与代码解释
2020/04/08 Javascript
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python实现将通信达.day文件读取为DataFrame
2018/12/22 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
详解Python的三种拷贝方式
2020/02/11 Python
python数据爬下来保存的位置
2020/02/17 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
2020/05/03 Python
协程Python 中实现多任务耗资源最小的方式
2020/10/19 Python
用CSS禁用输入法(CSS3 UI规范)实例解析
2012/12/04 HTML / CSS
html5 input属性使用示例
2013/06/28 HTML / CSS
深圳茁壮笔试题
2015/05/28 面试题
机械工程师求职自我评价
2013/09/23 职场文书
药品质量检测应届生求职信
2013/11/14 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
机关作风整顿个人剖析材料
2014/10/06 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
Win11软件图标固定到任务栏
2022/04/19 数码科技