如何获取实现某个接口的类列表?(zope.interface)
这个问题已经说得很清楚了。难道我是在错误的地方使用 zope.interface
吗?
我需要的其实就是一种简单的方法,用来注册那些实现特定功能的类(比如CMS中的小部件或端口)。就像django用它的ModelAdmin类那样,不过我不想要自动化的,也不想要神奇的效果。
2 个回答
1
最简单的方法是给 zope.interface.declarations.classImplements
(还有它的别名 zope.interface.classImplements
)加上装饰器。
from zope import interface as i
from collections import defaultdict
oclassImplements = i.classImplements
registry = defaultdict(list)
def classImplements(cls, *interfaces):
for a in interfaces:
registry[a].append(cls)
return oclassImplements(cls, *interfaces)
i.classImplements = i.declarations.classImplements = classImplements
注意,你必须在实现你想要捕捉的接口之前进行这个操作,通常最好是在导入其他任何东西之前就这样做。
3
这段话讲的是 zope.component
这个架构能解决的问题,但你需要先注册所有使用某个接口的地方。单靠 zope.interface
是无法追踪哪些对象实现了某个特定的接口的。
你需要关注的是 工具注册;也就是所有根据接口定义的服务的实现。