0

我有一个接口,如:

class IRepository(Interface):
    def __init__(path, **options):
        pass

我为 Git 和 Mercurial 实现了这个接口。现在我想编写存储库工厂,它接受一个字符串(路径)并返回一个 IRepository,通过探测它是一个存储库git还是hg存储库。

然而,简单地说:

registerAdapter(repofactory, (str, unicode, ), IRepository)

不起作用,导致既不str也不unicode支持该IInterface接口。

现在,我将使用:

registerAdapter(repofactory, (Interface, ), IRepository)

但我想知道是否有只匹配字符串对象和其他 Python 内置类型的接口。

4

1 回答 1

0

不,字符串和 unicode 对象不能有接口。但是对于这个用例,我会注册命名实用程序并按名称查找实用程序,或者列出所有可用的实用程序:

from zope.component import getUtilitiesFor, getUtility

names = [name for name, utility in getUtilitiesFor(IRepository)]

gitrepo = getUtility(IRepository, name='git')
于 2013-01-08T09:12:09.060 回答