【发布时间】:2013-01-04 19:37:43
【问题描述】:
我希望当我创建一个接口IB 继承自IA,然后使用interface.providedBy() 查询B 的实例(实现IB)时,我会看到IA 和@ 987654327@ 在列表中。但是,情况似乎并非如此。
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)
【问题讨论】:
标签: python zope.interface