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列表append和+的区别浅析
Feb 02 Python
Python描述器descriptor详解
Feb 03 Python
Python实现的简单文件传输服务器和客户端
Apr 08 Python
python通过索引遍历列表的方法
May 04 Python
python类:class创建、数据方法属性及访问控制详解
Jul 25 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
python WindowsError的错误代码详解
Jul 23 Python
python3学习笔记之多进程分布式小例子
Feb 13 Python
Python实现查看系统启动项功能示例
May 10 Python
python+splinter自动刷新抢票功能
Sep 25 Python
对python中 math模块下 atan 和 atan2的区别详解
Jan 17 Python
python批量修改xml属性的实现方式
Mar 05 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 adodb分页实现代码
2009/03/19 PHP
PHP教程之PHP中shell脚本的使用方法分享
2012/02/23 PHP
php使用递归计算文件夹大小
2014/12/24 PHP
php 问卷调查结果统计
2015/10/08 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
PHP执行linux命令6个函数代码实例
2020/11/24 PHP
js控制框架刷新
2008/08/01 Javascript
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
extJs 常用到的增,删,改,查操作代码
2009/12/28 Javascript
window.name代替cookie的实现代码
2010/11/28 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
JS中with的替代方法与String中的正则方法详解
2016/12/23 Javascript
微信小程序实现图片预览功能
2018/01/31 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
利用vscode调试编译后的js代码详解
2018/05/14 Javascript
纯JS实现出生日期[年月日]下拉菜单效果
2018/06/01 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
angular 实现下拉列表组件的示例代码
2019/03/09 Javascript
ajax跨域访问遇到的问题及解决方案
2019/05/23 Javascript
Vue 自适应高度表格的实现方法
2020/05/13 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
基于python中pygame模块的Linux下安装过程(详解)
2017/11/09 Python
python实现逆序输出一个数字的示例讲解
2018/06/25 Python
Python网络爬虫信息提取mooc代码实例
2020/03/06 Python
Python进程的通信Queue、Pipe实例分析
2020/03/30 Python
工程造价管理专业大专生求职信
2013/10/06 职场文书
求职自荐信格式
2013/12/04 职场文书
园林设计专业毕业生求职信
2014/03/23 职场文书
《北京的春节》教学反思
2014/04/07 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
可可西里观后感
2015/06/08 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python