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 相关文章推荐
pycharm 使用心得(九)解决No Python interpreter selected的问题
Jun 06 Python
使用Python发送邮件附件以定时备份MySQL的教程
Apr 25 Python
详解在Python程序中自定义异常的方法
Oct 16 Python
python处理html转义字符的方法详解
Jul 01 Python
pandas数值计算与排序方法
Apr 12 Python
python 杀死自身进程的实现方法
Jul 01 Python
python 内置函数汇总详解
Sep 16 Python
解决keras模型保存h5文件提示无此目录问题
Jul 01 Python
Python基础教程之输入输出和运算符
Jul 26 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
Django后端按照日期查询的方法教程
Feb 28 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 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
PHP5常用函数列表(分享)
2013/06/07 PHP
Laravel框架自定义公共函数的引入操作示例
2019/04/16 PHP
PHP实现简单日历类编写
2020/08/28 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
使用js检测浏览器的实现代码
2013/05/14 Javascript
基于RequireJS和JQuery的模块化编程日常问题解析
2016/04/14 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
JS实现图片切换特效
2019/12/23 Javascript
Python上传package到Pypi(代码简单)
2016/02/06 Python
Python在线运行代码助手
2016/07/15 Python
python3实现ftp服务功能(客户端)
2017/03/24 Python
[原创]教女朋友学Python(一)运行环境搭建
2017/11/29 Python
详解python3中zipfile模块用法
2018/06/18 Python
python pyheatmap包绘制热力图
2018/11/09 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
python绘制随机网络图形示例
2019/11/21 Python
opencv python在视屏上截图功能的实现
2020/03/05 Python
Python使用re模块验证危险字符
2020/05/21 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
大学生四个方面的自我评价
2013/09/19 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
反邪教警示教育方案
2014/05/13 职场文书
党员一帮一活动总结
2014/07/08 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
感恩教育观后感
2015/06/17 职场文书
2016年9月份红领巾广播稿
2015/12/21 职场文书
范文之农村基层党建工作报告
2019/10/24 职场文书