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的urllib模块显示下载进度示例
Jan 17 Python
Python getopt模块处理命令行选项实例
May 13 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
Python3爬虫学习之应对网站反爬虫机制的方法分析
Dec 12 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
Jul 14 Python
Pytorch 实现自定义参数层的例子
Aug 17 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
python生成器推导式用法简单示例
Oct 08 Python
PyInstaller的安装和使用的详细步骤
Jun 02 Python
浅谈python量化 双均线策略(金叉死叉)
Jun 03 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
python中entry用法讲解
Dec 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下使用以下代码连接并测试
2008/04/09 PHP
php中判断文件存在是用file_exists还是is_file的整理
2012/09/12 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
php提交表单发送邮件的方法
2015/03/20 PHP
PHP函数checkdnsrr用法详解(Windows平台用法)
2016/03/21 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
javascript parseInt 函数分析(转)
2009/03/21 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
精通JavaScript 纠正 cleanWhitespace函数
2010/03/11 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
微信小程序实现轮播图效果
2017/09/07 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
在vue使用clipboard.js进行一键复制文本的实现示例
2019/01/15 Javascript
Vue表情输入组件 微信face表情组件
2019/02/11 Javascript
Vue实现开心消消乐游戏算法
2019/10/22 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[00:14]PWL:老朋友Mushi拍VLOG与中国玩家问好
2020/11/04 DOTA
Python 数据结构之旋转链表
2017/02/25 Python
Django的信号机制详解
2017/05/05 Python
简述:我为什么选择Python而不是Matlab和R语言
2017/11/14 Python
numpy中索引和切片详解
2017/12/15 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python调用C语言程序方法解析
2020/07/07 Python
利用HTML5 Canvas制作键盘及鼠标动画的实例分享
2016/03/15 HTML / CSS
致100米运动员广播稿
2014/02/14 职场文书
2014年元旦感言
2014/03/06 职场文书
优秀共产党员事迹材料2016
2016/02/29 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
Golang 实现WebSockets
2022/04/24 Golang
Nginx的gzip相关介绍
2022/05/11 Servers
Apache POI操作批量导入MySQL数据库
2022/06/21 Servers