[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多态实例详解相关推荐

  1. python中正则表达式_Python中正则表达式详解

    正则表达式是用来简洁表达一组字符串的表达式,本文主要和大家分享Python 中正则表达式知识详解,希望能帮助到大家.操作符说明实例.表示任何单个字符 [ ]字符集,单个字符取值范围[abc]表示a或b ...

  2. python切片输出_Python语言之详解切片

    本篇文章主要讲述Python语言之详解切片,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入. 切片操作就是对list,元组,字符串进行截取操作有了切片操作,很多地方循环就不再需要了 ...

  3. python mysql实例_Python 操作MySQL详解及实例

    使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy. Python-MySQL资格最老,核心由C语言打造, ...

  4. python元编程_python元编程详解(3)

    今天转载一片非常精彩的文章供大家欣赏:参考文章链接. python开发者门户一个很好的学习python的网站,大家有时间可以多看看. 下面正式开始今天的内容: 在理解元类之前,你需要先掌握Python ...

  5. python path模块_python pathlib模块详解

    借鉴于 pathlib 官方文档 用于自己学习和记录 使用 pathlib 模块基本可以代替 os.path 来处理路径.它采用了完全面向对象的编程方式. 其包含六个类,图片如下: 但是大体有两类: ...

  6. python复数类型转换_Python 复数数据类型详解(complex)[学习 Python 必备基础知识][看此一篇就够了]...

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 复 ...

  7. python dict下标_Python库collections详解

    collections模块包含了除了内置类型list.dict.tuple之外的容器类型.本文详细介绍了Counter.defaultdict.namedtuple.OrderedDict.Chain ...

  8. python subprocess模块_python subprocess模块详解

    一.subprocess标准库 python执行shell脚本,通常会使用so模块中的几个方法,如system.spawn*.popen等.subprocess标准库的引入就是为了取代这些老的模块方法 ...

  9. python模块导入_Python模块导入详解

    定义 模块:用来从逻辑上组织Python代码(变量.函数.类.逻辑)去实现一个功能.本质就是.py结尾的Python文件. 包:用来从逻辑上组织模块的(可以放一堆模块在目录下).本质就是一个目录(必须 ...

  10. python集合输出_Python集合操作方法详解

    集合是无序的,天生不重复的数据组合,它的作用如下: 去重,即:把一个列表变成集合,就去重了 关系测试,即:测试两组集合的交集.并集和差集等 一.集合常用方法总结 二.定义 1.语法 >>& ...

最新文章

  1. HDOJ 5421 Victor and String 回文串自己主动机
  2. jsoncpp在vs2013上的编译
  3. 【开发环境】Windows 安装 PyCharm 开发环境 ( 下载 PyCharm | 安装 PyCharm | 在 PyCharm 中创建 Python 工程 )
  4. python+selenium自动化测试——浏览器驱动
  5. sqli-labs过关笔记(Page-1:1-22关)
  6. java读取写入文件
  7. [转]快速使用FileProvider解决Android7.0文件权限问题
  8. 质因数分解(洛谷P1075题题解,Java语言描述)
  9. UE4 在C++ 动态生成几何、BSP体、BRUSH ---- MESH_GENERATION
  10. 进入hbase shell速度很慢_HBase——大数据平台之分布式NoSQL数据库教程
  11. VMware虚拟机安装CentOS6.4、部署web项目全过程(设置固定IP、安装JDK、Tomcat、Redis、部署项目)...
  12. Linux shell命令提示符
  13. php和python-什么是Python和php?Python与PHP有什么区别
  14. MVC整体流程机制原理概述
  15. stm32中的ISP一键下载原理分析
  16. unity素材二:三个老头欧系战士模型带动作特效
  17. rake matlab,基于MATLAB的Rake接收机仿真及性能分析
  18. python数字类型中包含了哪三种类型_Python数字类型中包含了________、________和_________三种类型。...
  19. 如何用CSDN发布文章
  20. 天河微信小程序入门《四》:融会贯通,form表单提交数据库

热门文章

  1. Python数据分析入门(十九):绘制散点图
  2. ILSpy反编译软件的使用
  3. Java核心技术卷1:基础知识(原书第10版)
  4. 华为 HG255D 刷openwrt trunk 支持ipv6
  5. UCD的产品设计原则
  6. windows下开发人员装机软件一览
  7. 全国java二级考试范围,全国计算机二级Java考试大纲
  8. 如果计算机正执行屏幕保护程序 当用户,计算机一级考试参考试题(含答案)讲节一.doc...
  9. eo是什么?一份没有满分的试题
  10. LINUX操作系统练习题