Python跟Ruby一样,都是崇尚所谓Duck Typing的,也就是说,对于一个对象来说,它“是”什么类型的不重要,是不是支持某些操作才重要。解释器本身在编译时和运行时都不检查对象类型,只到运行时才直接执行所调用的方法,只要“它叫起来像鸭子,走起来像鸭子,那它就是鸭子”。
但是在做企业应用的时候,目前流行的方法是造一堆又一堆的framework。本质上造framework并不是很pythonic的做法,因为Python崇尚的是轻薄短小,简单直接。不过在面向特定企业开发领域的DSL还没有出现之前,快速开发企业应用时,framework还是有效的工具。所以Python也不得不造一些framework。比如Twisted,比如Zope,比如PEAK。
凡是用过所谓面向对象的framework的人都知道那是怎么回事:framework里定义一堆interfaces,让用户去extend,以便和framework里预定义好的其他对象合作。因此,给予类型检查的interface的概念在object oriented frameworks里就非常重要。可偏偏Python的duck typing根本就没有把类型检查这个东西当回事,因此写起framework来就很成问题。
事实上,不少大型的python framework,都以某种方式引入了interface,比如Twisted和Zope引入了Zope.Interface,而PEAK定义了PyProtocol,本质上都是在模拟C++/Java中的类型检查。
GvR想在Python中内置一种机制,使得各个框架作者不必另起炉灶自制一个模拟的类型检查机制。
python 的 duck type
于 2011-03-20 22:00:00 首次发布