python的多态性学习思考1
2014-05-01 15:43
176 查看
python的多态性
python的多态性, 是非常灵活的,是我非常喜爱的一个特点,也是让我决定拿python作为我的现阶段主要开发语言的原因之一.相信在任何语言中,多态性都是最迷人的一个特性.学习过次c++的人都是非常明确多态的定义的(虽然你不一定理解).
c++的多态,一句话就是基于类的, 比如猫 ,狗, 猪,这些都是动物 ,动物是一个基类, 如果我们向动物这个类发出一个命令-----吃东西,那么他们都会按照自己的方式来吃东西.
这就是多态 . 这里的动物涵盖了 猫 ,狗, 猪 . 也就是说,很多的对象市隐藏在这个基类的接口中的.
c++的多态并不是默认的,因为使用这个会占用一定内存, 我们必须显式的声明 一个方法 ---使用虚函数机制.
但是python 的多态有着非常大的不同.
(1)首先,python的多态性是默认的, 融化在这个语言核心的.(2)python的多态性是行为多态.也就是基于行为协议的.
什么是行为多态?有很多种说法
(1)通俗的说: 你看起来像什么,那么你就是什么.
(2)一个对象的意义取决于你对他做什么
还是举几个python里的例子.
(1)相信大家对python的for语句应该相当熟悉,这里用到了迭代协议.有着迭代语境.
for i in range(10):
for i in range(10): print i这里做了三个动作:
第一,启动,生成了一个迭代器 调用range(10).__iter__,在python3里,可以调用内置函数iter()
第二,调用迭代器的range(10).__next__方法(python3.x)
第三,捕捉异常
也就是说只要我们的对象实现了 __iter__,__next__的接口协议,那么就可以使用这个for循环.
(2)print打印
print "hello world"这里发生了什么?你猜对了,这里也有着非常奇妙的多态性.python的多态无处不在.
这里发生了两个动作:
第一,import sys
第二,sys.stdout.wirte("hello world")
这里实现的是写文件的协议.默认情况下,我们的标准输出流是链接到终端.
I/O是类文件对象,想像一下, 如果我们实现了一个类文件对象,也就是write协议, 然后把标准输出流重定向到这个类文件对象,那么所有的print就是在向这个类文件发送数据了.
import sys sys.stdout = open("log.txt", "a") ....... print "hello world"
发挥我们的想象,比如raw_input,我们也可以定制
比如上下文协议.只要我们的对象实现了某些协议,那么我们的对象就是某些特定的对像,有着某些特定的行为.从而普适用与一些特定的接口,这就是行为多态.
这里的运用就有好多了
StringIO 一个字符串缓冲模块
tempfile 临时文件对象
socket 套接字
.....
这些都是类文件对象
还有好多东西可以深入了解, python真的很迷人.
相关文章推荐
- 《OpenCV 3计算机视觉:Python语言实现》学习笔记——目标跟踪中基本运动检测的思考
- Python 编码解码的问题(学习笔记+总结思考)
- Python源码学习(四)——对象的多态性和引用计数
- Python使用设计模式的学习与思考
- Python学习中递归、迭代、生成器、函数式编程的思考
- 学习python的一点思考
- 如何象计算机专家一样思考:学习Python 前言
- Python入门篇--简单总结+学习方式思考
- 如何象计算机专家一样思考:学习Python --序
- 如何象计算机专家一样思考:学习Python--第一章
- Python 学习:今天写了一个简单的定时任务
- python 学习 类型
- Python 学习笔记 ——异常处理
- python3-asyncio 学习笔记 3 -- run_until_complete
- 关于生命周期的学习和小思考
- Python学习笔记(三)——模块|面向对象
- python学习日志8
- python中文编码转换 分类: python基础学习 python 小练习 2013-10-11 17:22 331人阅读 评论(0) 收藏
- python模块学习(1)
- Python学习笔记1:Python基础