您的位置:首页 > 编程语言 > Python开发

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真的很迷人.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: