关于   小悟志   栏目   标签   文章   归档   友链

   云上小悟  +  

动态语言的“鸭子类型”

InfoTech / by: 麦新杰 / 发布:2017年1月31日 / 28次阅读 / 暂无评论
/ 最后修改时间: 2017-01-31 21:09:35

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

拍拍贷
featured image

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

 

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

比如,我们写了一个函数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)

《动态语言的“鸭子类型”》暂无评论

电子邮件地址不会被公开。 必填项已用*标注


前一篇:
后一篇:

云上小悟独立博客网站文章内容,除非特别注明,全部都是原创(非原创请阅读本站版权声明),如需转载,请保留文章链接!原创文章更具个性,有些文字虽略显随意,但不影响个人思想表达。部分文章是我自己的笔记,为自己记录,总结和收藏,同时也分享给您!这是本博建设的出发点,希望您喜欢并得到您的支持!

©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有  备案号:苏ICP备14045477号-1  economists.cn的备案号:苏ICP备14045477号-3    联系我们

云上小悟,麦新杰的独立博客