我如何获得实现接口的类列表? (zope.interface)

时间:2011-08-05 21:13:22

标签: python interface zope zope.interface

问题说明了一切。或者我是否尝试将zope.interface用于错误的目的?

我需要的是基本的单向操作方法,用于注册实现特定功能的类(CMS的小部件或Portlet)。基本上就像django的ModelAdmin类一样,但不是自动的而不是魔术。

2 个答案:

答案 0 :(得分:3)

这是zope.component架构解决的问题,但您必须注册接口的所有用途。 zope.interface本身并不跟踪哪些对象实现给定的接口。

您正在寻找的是utility registrations;接口定义的给定服务的所有实现。

答案 1 :(得分: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

请注意,您必须在实现要捕获的接口之前执行此操作,通常最好在导入其他任何内容之前执行此操作。