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获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
python实现探测socket和web服务示例
Mar 28 Python
Python中subprocess的简单使用示例
Jul 28 Python
在python3环境下的Django中使用MySQL数据库的实例
Aug 29 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
Sep 06 Python
python中使用iterrows()对dataframe进行遍历的实例
Jun 09 Python
python使用多进程的实例详解
Sep 19 Python
Python数据可视化之画图
Jan 15 Python
python 列表中[ ]中冒号‘:’的作用
Apr 30 Python
使用python去除图片白色像素的实例
Dec 12 Python
使用Python制作新型冠状病毒实时疫情图
Jan 28 Python
Python实现排序方法常见的四种
Jul 15 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
JS实现php的伪分页
2008/05/25 PHP
PHP使用ODBC连接数据库的方法
2015/07/18 PHP
CodeIgniter多语言实现方法详解
2016/01/20 PHP
实现复选框全选/全不选切换
2006/12/23 Javascript
用javascript获取textarea中的光标位置
2008/05/06 Javascript
JS图片切换的具体方法(带缩略图版)
2013/11/12 Javascript
深入剖析JavaScript中的枚举功能
2014/03/06 Javascript
JavaScript模块随意拖动示例代码
2014/05/27 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
vue学习笔记之指令v-text && v-html && v-bind详解
2017/05/12 Javascript
利用JS判断客户端类型你应该知道的四种方法
2017/12/22 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
ajax请求data遇到的问题分析
2018/01/18 Javascript
vue.js 微信支付前端代码分享
2018/02/10 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
详解Python中最难理解的点-装饰器
2017/04/03 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
教你用一行Python代码实现并行任务(附代码)
2018/02/02 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
使用Python将字符串转换为格式化的日期时间字符串
2019/09/01 Python
基于Python正确读取资源文件
2020/09/14 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
英国领先的露营和露营车品牌之一:OLPRO
2019/08/06 全球购物
类的返射机制中的包及核心类
2016/09/12 面试题
与UNIX有关的几个名词
2015/09/17 面试题
工作分析计划书
2014/04/30 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
培训讲师开场白
2015/06/01 职场文书
会计工作自我鉴定范文
2019/06/21 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python
go 原生http web 服务跨域restful api的写法介绍
2021/04/27 Golang
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript