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实现绘制树枝简单示例
Jul 24 Python
Python可变参数函数用法实例
Jul 07 Python
分享几道你可能遇到的python面试题
Jul 24 Python
Python 私有函数的实例详解
Sep 11 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
分析Python中解析构建数据知识
Jan 20 Python
python3爬取各类天气信息
Feb 24 Python
python实现简单多人聊天室
Dec 11 Python
python实现简单日期工具类
Apr 24 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
Oct 04 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简单命令代码集锦
2007/09/24 PHP
PHP 函数语法介绍一
2009/06/14 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
PHP表单数据写入MySQL数据库的代码
2016/05/31 PHP
Gird事件机制初级读本
2007/03/10 Javascript
jquery ajax中使用jsonp的限制解决方法
2013/11/22 Javascript
JavaScript检测原始值、引用值、属性
2016/06/20 Javascript
jquery-mobile基础属性与用法详解
2016/11/23 Javascript
JS调用打印机功能简单示例
2016/11/28 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
使用原生js+canvas实现模拟心电图的实例
2017/09/20 Javascript
vue自定义全局组件(自定义插件)的用法
2018/01/30 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
layui 对弹窗 form表单赋值的实现方法
2019/09/04 Javascript
vue 动态组件用法示例小结
2020/03/06 Javascript
[01:02:46]VGJ.S vs NB 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python+selenium实现登录账户后自动点击的示例
2017/12/22 Python
flask 框架操作MySQL数据库简单示例
2020/02/02 Python
python和go语言的区别是什么
2020/07/20 Python
UGG雪地靴荷兰官网:UGG荷兰
2016/09/09 全球购物
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
大学生自助营养快餐店创业计划书
2014/01/13 职场文书
师生聚会感言
2014/01/26 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
安全生产年活动总结
2014/08/29 职场文书
群众路线领导班子整改方案
2014/10/25 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
2014年平安夜寄语
2014/12/08 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
React实现动效弹窗组件
2021/06/21 Javascript
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android
使用Redis实现分布式锁的方法
2022/06/16 Redis