最近考察了一下用Python做中大型项目的可能性。发现Python里面没有接口,只有duck typing,就好象C++ template一样,模板参数T的约束是一种隐式的。这样就只有通过文档,或阅读源代码才能知道类型的约束。这样对于大型的项目的模块划分和协作来讲是非常不方便的。我觉得这算是动态类型语言在大型应用中的一个明显缺点吧。动态类型语言加入接口支持的意义其实不限于静态类型检查,而是一种语言的抽象机制,能够让模块间的交互更加规范。Python目前有一些基于库的模拟接口的方法,但还远不如语言级别的支持来得直接和有效。另外,我觉得C++0x被否决掉的concept也是一种为模板参数增加显式约束的方式,这个思路其实可以为动态语言所借鉴。
下面是Python作者关于接口的一些看法:
http://www.artima.com/weblogs/viewpost.jsp?thread=92662