Python学习笔记——鸭子类型(duck typing)

前言

在实习期间,由于工作需要首次接触了Python这门语言,由于学习和使用的时间非常短,所以当时认为,作为一门解释性语言,在做Web开发方面,Python和PHP的差别不大,甚至在一些应用场景上没有PHP来的简单粗暴。后来,在导师的推荐下,通过《流畅的Python》又一次深入的学习了Python,大致从数据结构、函数、面向对象和控制流程这几个部分深入的学习了这一门语言,对其中作为一等公民的函数和面向对象的实现留下了深刻的映像,开始体会到这门语言的独有魅力。
这本书中,对于Python面向对象的实现机制,介绍了一个非常有趣的概念:鸭子类型(duck typing)。本文将基于鸭子类型这一概念来记录和分享一些Python的学习体会,同时结合过去对Java的学习,比较这两种风格截然不同的语言。同时,基于Java的面向对象,提出鸭子类型背后的两种面向对象思想:多态和范型

什么是鸭子类型

在维基百科中是这样定义的:

鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定。

而鸭子类型这一名字出自James Whitcomb Riley在鸭子测试中提出的如下的表述:

当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。

简单归纳就是:对象的类型不再由继承等方式决定,而由实际运行时所表现出的具体行为来决定。
这个概念在解释性语言中还是非常容易理解的,因为解释性语言在定义函数的参数时是无法指定具体参数类型的,另一方面,参数的类型是在解释执行时才能确定,不像类Java语言一样,在编译期编译器就可以确定参数类型,从而在多态模式下确定函数的执行版本了。
另一方面,Python并未沿用Java语言中复杂的接口和类的继承框架,因此对于面向对象有独有的实现风格,接下来的内容和今后更新的博客将详细探讨这个问题。

<
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值