由於python沒有接口概念,所以zope 提供了個第三方庫開源使用,下面簡單介紹zope.interface.implementer的使用
直接看例子,下面例子是在twisted里摘錄的
接口IResolverSimple
class IResolverSimple(Interface): def getHostByName(name, timeout = (1, 3, 11, 45)): """ Resolve the domain name C{name} into an IP address. """
實現BlockingResolver
@implementer(IResolverSimple) class BlockingResolver: def getHostByName(self, name, timeout = (1, 3, 11, 45)): try: address = socket.gethostbyname(name) except socket.error: msg = "address %r not found" % (name,) err = error.DNSLookupError(msg) return defer.fail(err) else: return defer.succeed(address)
可以通過
IResolverSimple.implementedBy
IResolverSimple.providedBy
對實現進行檢測
foo = BlockingResolver()
IResolverSimple.implementedBy(BlockingResolver) #display True
IResolverSimple.implementedBy(foo) #display True