python多态实例_Python多态实例详解
[Python]代码
# coding:utf-8
"""
多态(英语:Polymorphism),是指面向对象程序运行时,相同的消息可能会送给多个不同的类之对象,
而系统可依据对象所属类,引发对应类的方法,而有不同的行为。
简单来说,所谓多态意指相同的消息给予不同的对象会引发不同的动作称之。
在面向对象程序设计中,多态一般指子类型多态(Subtype polymorphism)。
上面的定义有点让初学者费解,黄哥用“打开”这个动作来描述面向对象的多态。
"打开",可以是打开门,打开窗户,打开书等等。"打开"这个动作,碰到不同的对象门,窗户,书,有不同的行为模式。
这个就是多态。
本文由黄哥python培训,黄哥所写
黄哥python远程视频培训班
https://github.com/pythonpeixun/article/blob/master/index.md
黄哥python培训试看视频播放地址
https://github.com/pythonpeixun/article/blob/master/python_shiping.md
"""
# 例1
class Door(object):
def open(self):
print "打开门"
class Windows(object):
def open(self):
print "打开窗户"
class Book(object):
def open(self):
print "打开书"
lst = [Door(), Windows(), Book()]
for item in lst:
item.open()
# 例2 一般用继承来说明多态的例子
class Animal:
def __init__(self, name):
self.name = name
def talk(self):
raise NotImplementedError("Subclass must implement abstract method")
class Cat(Animal):
def talk(self):
return 'Meow!'
class Dog(Animal):
def talk(self):
return 'Woof! Woof!'
animals = [Cat('Missy'),
Cat('Mr. Mistoffelees'),
Dog('Lassie')]
for animal in animals:
print animal.name + ': ' + animal.talk()
# 例3 python 内置有很多多态的应用
# 同样的 +号 可以用在不同的对象相加,体现(相仿:指相加这个事情)了多态的功能。
print 1 + 2
print "hello" + '黄哥'
# len 函数传不同的参数,也体现了多态的功能。
print len("黄哥python培训")
print len([2, 4, 5, 7])
# 工程应用
# 一个简单的日志记录函数,用判断实现的,重构为面向对象多态来实现。
#如果有大量的判断语句,就可以用多态来实现。
def log_msg(log_type):
msg = 'Operation successful'
if log_type == 'file':
log_file.write(msg)
elif log_type == 'database':
cursor.execute('INSERT INTO log_table (MSG) VALUES ('?')', msg)
#重构
class FileLogger(object):
def log(self, msg):
log_file.write(msg)
class DbLogger(object):
def log(self, msg):
cursor.execute('INSERT INTO log_table (MSG) VALUES ('?')', msg)
def log_msg(obj):
msg = 'Operation successful'
obj.log(msg)
python多态实例_Python多态实例详解相关推荐
- python中正则表达式_Python中正则表达式详解
正则表达式是用来简洁表达一组字符串的表达式,本文主要和大家分享Python 中正则表达式知识详解,希望能帮助到大家.操作符说明实例.表示任何单个字符 [ ]字符集,单个字符取值范围[abc]表示a或b ...
- python切片输出_Python语言之详解切片
本篇文章主要讲述Python语言之详解切片,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 切片操作就是对list,元组,字符串进行截取操作有了切片操作,很多地方循环就不再需要了 ...
- python mysql实例_Python 操作MySQL详解及实例
使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy. Python-MySQL资格最老,核心由C语言打造, ...
- python元编程_python元编程详解(3)
今天转载一片非常精彩的文章供大家欣赏:参考文章链接. python开发者门户一个很好的学习python的网站,大家有时间可以多看看. 下面正式开始今天的内容: 在理解元类之前,你需要先掌握Python ...
- python path模块_python pathlib模块详解
借鉴于 pathlib 官方文档 用于自己学习和记录 使用 pathlib 模块基本可以代替 os.path 来处理路径.它采用了完全面向对象的编程方式. 其包含六个类,图片如下: 但是大体有两类: ...
- python复数类型转换_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了]...
您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 复 ...
- python dict下标_Python库collections详解
collections模块包含了除了内置类型list.dict.tuple之外的容器类型.本文详细介绍了Counter.defaultdict.namedtuple.OrderedDict.Chain ...
- python subprocess模块_python subprocess模块详解
一.subprocess标准库 python执行shell脚本,通常会使用so模块中的几个方法,如system.spawn*.popen等.subprocess标准库的引入就是为了取代这些老的模块方法 ...
- python模块导入_Python模块导入详解
定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...
- python集合输出_Python集合操作方法详解
集合是无序的,天生不重复的数据组合,它的作用如下: 去重,即:把一个列表变成集合,就去重了 关系测试,即:测试两组集合的交集.并集和差集等 一.集合常用方法总结 二.定义 1.语法 >>& ...
最新文章
- HDOJ 5421 Victor and String 回文串自己主动机
- jsoncpp在vs2013上的编译
- 【开发环境】Windows 安装 PyCharm 开发环境 ( 下载 PyCharm | 安装 PyCharm | 在 PyCharm 中创建 Python 工程 )
- python+selenium自动化测试——浏览器驱动
- sqli-labs过关笔记(Page-1:1-22关)
- java读取写入文件
- [转]快速使用FileProvider解决Android7.0文件权限问题
- 质因数分解(洛谷P1075题题解,Java语言描述)
- UE4 在C++ 动态生成几何、BSP体、BRUSH ---- MESH_GENERATION
- 进入hbase shell速度很慢_HBase——大数据平台之分布式NoSQL数据库教程
- VMware虚拟机安装CentOS6.4、部署web项目全过程(设置固定IP、安装JDK、Tomcat、Redis、部署项目)...
- Linux shell命令提示符
- php和python-什么是Python和php?Python与PHP有什么区别
- MVC整体流程机制原理概述
- stm32中的ISP一键下载原理分析
- unity素材二:三个老头欧系战士模型带动作特效
- rake matlab,基于MATLAB的Rake接收机仿真及性能分析
- python数字类型中包含了哪三种类型_Python数字类型中包含了________、________和_________三种类型。...
- 如何用CSDN发布文章
- 天河微信小程序入门《四》:融会贯通,form表单提交数据库