我希望当我使接口IB
继承自IA
,然后用于查询(实现)interface.providedBy()
的实例时,我会在列表中看到和。然而,情况似乎并非如此。B
IB
IA
IB
from zope import interface
class IA(interface.Interface):
pass
class IB(IA): # We inherit from IA
pass
class B(object):
interface.implements(IB)
if __name__ == '__main__':
b = B()
print 'Does B() provide IA? %s' % IA.providedBy(b)
print 'providedBy(B()): %s' % list(interface.providedBy(b))
运行此代码会产生以下输出:
Does B() provide IA? True
providedBy(B()): [<InterfaceClass __main__.IB>]
如果B()
提供IA
,如输出的第一行所示,为什么没有IA
出现在输出的第二行?
更新:我通过使用以下解决方法解决了这个问题。我没有兴趣查看任何提供程序类、基类 (zope.interface.Interface) 或结果中的任何类型的重复项,所以我做了以下操作。
def getAllInterfaces(obj):
all_ifaces = set()
def buildSet(ifaces):
for iface in ifaces:
if iface != interface.Interface:
all_ifaces.add(iface)
buildSet(iface.__bases__)
buildSet(list(interface.providedBy(obj)))
return tuple(all_ifaces)