我有一个类似的界面:
class IRepository(Interface):
def __init__(path, **options):
pass
我为Git和Mercurial都实现了这个接口。现在我想编写获取字符串(路径)并返回IRepository的repository-factory,通过探测它是git
还是hg
存储库。
然而,只是说:
registerAdapter(repofactory, (str, unicode, ), IRepository)
不起作用,导致str
和unicode
都不支持IInterface
界面。
现在,我要去:
registerAdapter(repofactory, (Interface, ), IRepository)
但我想知道是否有接口只匹配字符串对象和其他Python内置类型。
答案 0 :(得分:0)
不,字符串和unicode对象不能有接口。但对于这个用例,我会注册命名的实用程序,并按名称查找实用程序,或列出所有可用的实用程序:
from zope.component import getUtilitiesFor, getUtility
names = [name for name, utility in getUtilitiesFor(IRepository)]
gitrepo = getUtility(IRepository, name='git')