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 返回汉字的汉语拼音
Feb 27 Python
pyqt4教程之messagebox使用示例分享
Mar 07 Python
wxPython定时器wx.Timer简单应用实例
Jun 03 Python
Python首次安装后运行报错(0xc000007b)的解决方法
Oct 18 Python
从CentOS安装完成到生成词云python的实例
Dec 01 Python
Python使用pyh生成HTML文档的方法示例
Mar 10 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
Django使用redis缓存服务器的实现代码示例
Apr 28 Python
python代码编写计算器小程序
Mar 30 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
python re的findall和finditer的区别详解
Nov 15 Python
python 发送邮件的四种方法汇总
Dec 02 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 SQL防注入代码集合
2008/04/25 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
微信开发之获取JSAPI TICKET
2017/07/07 PHP
对采用动态原型方式无法展示继承机制得思考
2009/12/04 Javascript
JQueryEasyUI datagrid框架的基本使用
2013/04/08 Javascript
jQuery的:parent选择器定义和用法
2014/07/01 Javascript
jQuery实现仿腾讯微博滑出效果报告每日天气的方法
2015/05/11 Javascript
jQuery实现鼠标跟随提示层效果代码(可显示文本,Div,Table,Html等)
2016/04/18 Javascript
解析JavaScript模仿块级作用域
2016/12/29 Javascript
Bootstrap table表格简单操作
2017/02/07 Javascript
基于Datatables跳转到指定页的简单实例
2017/11/09 Javascript
基于nodejs的雪碧图制作工具的示例代码
2018/11/05 NodeJs
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
Python Queue模块详细介绍及实例
2016/12/27 Python
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
python读取视频流提取视频帧的两种方法
2020/10/22 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
Python直接赋值、浅拷贝与深度拷贝实例分析
2019/06/18 Python
python 列表推导式使用详解
2019/08/29 Python
Python中logging日志库实例详解
2020/02/19 Python
OpenCV 之按位运算举例解析
2020/06/19 Python
零基础小白多久能学会python
2020/06/22 Python
美国最大的网上冲印店:Shutterfly
2017/01/01 全球购物
美国用餐电影院:Alamo Drafthouse Cinema
2020/01/23 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
计算机个人求职信范例
2014/01/24 职场文书
中班中秋节活动反思
2014/02/18 职场文书
一年级语文下册复习计划
2015/01/17 职场文书
2015年网管个人工作总结
2015/05/22 职场文书
新娘婚礼致辞
2015/07/27 职场文书
九不准学习心得体会
2016/01/23 职场文书
React 高阶组件HOC用法归纳
2021/06/13 Javascript
Go语言设计模式之结构型模式
2021/06/22 Golang