尽管为Python增加接口的呼声一直存在,zope也为实现python的“面向协议编程”提供了接口(详见 zope文档 ),但Java中为了实现多态性而提供的接口对于Python而言是不需要的。首先看一个简单例子的Java版:
InterfaceFunc.java
public class InterfaceFunc { public static void main(String[] args) { MyInterface a = new CA(); MyInterface b = new CB(); deal(a); deal(b); } private static void deal(MyInterface instance) { instance.func(); } }
MyInterface.java
public interface MyInterface { void func(); }
CA.java
public class CA implements MyInterface { public void func() { System.out.println("I am A"); } }
CB.java
public class CB implements MyInterface { public void func() { System.out.println("I am B"); } }
对应的Python代码:
class A: def func(self): print 'I am A' class B: def func(self): print 'I am B' def deal(obj): obj.func() a = A() b = B() deal(a) deal(b)
可以看到Python不需要接口的原因是其函数参数无需声明类型,只要参数能够完成函数要求其执行的操作就行,这就是 duck typing (中文叫“ 鸭子类型 ”)。