python支持多继承,但是不支持接口,zope.inteface是其三方的接口实现库,在twisted中有大量使用
- from zope.interface import Interface
- from zope.interface import implementer
- import socket
- class IHostNameResolver(Interface):
- def getHostByName(name, timeout = (1, 3, 11, 45)): # 可以不用self
- """
- Resolve the domain name C{name} into an IP address.
- """
- """
- 类装饰器等价于:implementer(IHostNameResolver)(HostNameResolver)
- """
- @implementer(IHostNameResolver)
- class HostNameResolver:
- def getHostByName(self, name, timeout = (1, 3, 11, 45)):
- try:
- address = socket.gethostbyname(name)
- except socket.error:
- return 'none'
- else:
- return address
- resolver = HostNameResolver()
- print resolver.getHostByName('localhost')
- # 判断HostNameResolver是否实现了接口IHostNameResolver
- # 判断HostNameResolver是否实现了接口IHostNameResolver
print IHostNameResolver.implementedBy(HostNameResolver) # True, 调用 SpecificationBasePy.implementedBy()
print IHostNameResolver.providedBy(resolver)