关于   小悟志   网站地图   归档   友情链接   联系   Feed

   云上小悟  +  

动态语言的“鸭子类型”

2017年1月31日 / 82次阅读  InfoTech

拍拍贷

关于什么是动态语言,请参考:动态语言和静态语言

 

什么是动态语言的“鸭子类型”?

比如,我们写了一个函数MF(),这个函数的入参是一个特定类型的对象,这个函数就干一个事情,就是调用对象的test()函数。假设这个类型是A,B继承A,现在我们有两个对象,a和b,分比是类型A和B。

如果我们把a和b作为入参传入MF(),a和b都有test()成员函数,执行都OK。

这时,如果我们再定义一个类型C,C跟A和B没有任何关系,唯一的联系都是,C也有一个test()函数。假设c是C的一个对象,我们把c传入MF(),一样可以得到执行。

本来我们设计MF()函数,是为了传入A或B的对象,或者继承A或B的其它新的类型对象,但是,突然出现了一个C,跟A和B没有任何关系,C的对象也可以传入MF()函数。我们说C就是“鸭子类型”(A-like object)。

 

这就是动态语言的“鸭子类型”,它并不要求严格的继承体系,一个对象只要“看起来像鸭子,走起路来像鸭子”,那它就可以被看做是鸭子。

Python的“file-like object“就是一种鸭子类型。对真正的文件对象,它有一个read()方法,返回其内容。但是,许多对象,只要有read()方法,都被视为“file-like object“。许多函数接收的参数就是“file-like object“,你不一定要传入真正的文件对象,完全可以传入任何实现了read()方法的对象。

本文链接:http://www.maixj.net/ict/dongtai-yuyan-yazi-14190
云上小悟 麦新杰(QQ:1093023102)

-- (*^-^*) --

评论是美德

无力满足评论实名制,评论对非实名注册用户关闭,有事QQ:1093023102.


前一篇:
后一篇:

栏目精选


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号苏ICP备14045477号-1

网站二维码
拍拍贷
go to top