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 08 Python
python逐行读取文件内容的三种方法
Jan 20 Python
Python psutil模块简单使用实例
Apr 28 Python
python连接MySQL数据库实例分析
May 12 Python
Python对文件操作知识汇总
May 15 Python
浅谈机器学习需要的了解的十大算法
Dec 15 Python
python 正确保留多位小数的实例
Jul 16 Python
Python判断对象是否相等及eq函数的讲解
Feb 25 Python
python基于itchat模块实现微信防撤回
Apr 29 Python
python SQLAlchemy 中的Engine详解
Jul 04 Python
学习和使用python的13个理由
Jul 30 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
《OVERLORD》手游英文版即将上线 手机上也能扮演骨王
2020/04/09 日漫
一个捕获函数输出的函数
2007/02/14 PHP
让PHP显示Facebook的粉丝数量方法
2014/01/08 PHP
去除php注释和去除空格函数分享
2014/03/13 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
关于jquery动态增减控件的一些想法和小插件
2010/08/01 Javascript
javascript复制对象使用说明
2011/06/28 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
jQuery弹出框代码封装DialogHelper
2015/01/30 Javascript
运行Node.js的IIS扩展iisnode安装配置笔记
2015/03/02 Javascript
jquery实现具有嵌套功能的选项卡
2016/02/12 Javascript
JavaScript操作表单实例讲解(上)
2016/06/20 Javascript
jQuery中delegate()方法的用法详解
2016/10/13 Javascript
微信小程序 两种为对象属性赋值的方式详解
2017/02/23 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
Python中无限元素列表的实现方法
2014/08/18 Python
Python实现把数字转换成中文
2015/06/29 Python
使用python代码进行身份证号校验的实现示例
2019/11/21 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
碧欧泉Biotherm加拿大官方网站:法国高端护肤品牌
2019/10/18 全球购物
超市促销实习自我鉴定
2013/09/23 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
自荐信如何制作?
2014/02/21 职场文书
护理人员的自我评价分享
2014/03/15 职场文书
2014年行政工作总结
2014/11/19 职场文书
幼儿园六一儿童节活动总结
2015/02/10 职场文书
单位实习介绍信
2015/05/05 职场文书
《秦兵马俑》教学反思
2016/02/24 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
Go Plugins插件的实现方式
2021/08/07 Golang
windows10声卡驱动怎么安装?win10声卡驱动安装操作步骤教程
2022/08/05 数码科技