python的多态性学习思考1
来源:互联网 发布:电信网络代理免费 编辑:程序博客网 时间:2024/05/18 18:43
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 syssys.stdout = open("log.txt", "a").......print "hello world"
发挥我们的想象,比如raw_input,我们也可以定制
比如上下文协议.只要我们的对象实现了某些协议,那么我们的对象就是某些特定的对像,有着某些特定的行为.从而普适用与一些特定的接口,这就是行为多态.
这里的运用就有好多了
StringIO 一个字符串缓冲模块
tempfile 临时文件对象
socket 套接字
.....
这些都是类文件对象
还有好多东西可以深入了解, python真的很迷人.
- python的多态性学习思考1
- c++多态性的一些思考
- 学习python的一点思考
- 多态性 学习笔记1
- java的多态性学习代码
- python 多态性
- Java学习第四周(1)--面向对象的多态性
- Python怎样用C实现对象的多态性
- Python使用设计模式的学习与思考
- Python 编码解码的问题(学习笔记+总结思考)
- 11.24学习PYTHON第二天 对print函数的思考
- .net 有关多态性的学习笔记
- Java 学习之 多态性的理解
- 学习的思考
- 对"学习"的思考
- 对于学习的思考
- 多线程的学习思考
- 关于学习的思考
- jsp和servlet的区别
- cocos2dx v3.0 正式版 搭建环境 创建项目 运行到android
- connect-flash 模块使用
- hdu 4496 D-City(并查集)
- ios 实现版本更新检查
- python的多态性学习思考1
- IDisposable 在C#中的作用
- 手机传感器及交互方式总结
- 南阳理工OJ_题目71 独木舟上的旅行
- NEFU 642 Monkey(DP)
- 从零开始学OpenGLES开发——第一章
- 解析nginx负载均衡
- umlの用例图
- java基础随记