0

私は次のようなインターフェースを持っています:

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

Git と Mercurial の両方にこのインターフェイスを実装しています。ここで、文字列 (パス) を受け取って IRepository を返す、repository-factory を書きたいと思いgitますhg

ただし、単純に言うと:

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

動作せず、インターフェースstrunicodeサポートしません。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 に答える