在对象里接口是这样被使用的:

   1 from zope.interface import implements
   2 from zope.interface import IExample
   3 
   4 class SimpleExample:
   5     implements(IExample)

implements()方法告诉系统这个类的实例提供IExample。但是当然,模块和类本身也可以实现接口。对于模块来说你可以使用moduleProvides(*interfaces)。对于类来说,你可以直接在类的定义里插入classImplements(*interfaces)或者对现有的类使用classProvides(cls,*interfaces)。同样,你可以使用在任何对象(包括类的实例)上使用directlyProvides(instance,*interfaces)。

接口对象本身含有一些非常棒的方法。最普通的一个就是providedBy(ob),它可以检测传递过来的对象是否是实现了这个接口。

同样的,你也可以通过调用IExample.implementedBy(SimpleExample)来传递到类里面并测试这个类的实例是否实现了这个接口。最后一个有用的方法是isOrExtends(interface)。这个方法用来检测传递的接口是否是接口或者传递的接口是否是这个接口的基(继承)接口。

当从接口创建类的时候,有一个很有帮助性的脚本叫pyskel.p,它可以帮助你生成类的骨架。在使用这个脚本之前,请确保ZOPE3/src在你的Python路径中。

使用方法:python2.3 utilities/pyskel.py dotted.path.ref.to.interface

这个调用将在你的控制台里创建类的骨架,它可以帮助你省去大量的输入。属性和方法的顺序与在接口里面出现的顺序是一样的。

最后需要注意的是,由于Python没有提供接口,那么zope. Interface包提供的一些实现了Python内建类型的接口。你可以在zope.interface.common里找到它们。

这就是接口的概览。这些介绍应该足够你开始下面章节的学习了。更多的概念将在你学习和使用本书余下部分的过程中变得愈加清晰起来。