Должен ли компонент Zope Component Architecture указывать интерфейсы, которые он реализует? - PullRequest
2 голосов
/ 28 декабря 2011

Примечание: я новичок в ZCA, поэтому код может быть неправильным;тем не менее, я немного знаком с тем, как работает ZCA.

Например:

class I1(Interface):
    def c1():
        pass

class U1(object):
    implements(I1) #is this necessary?
    def c1():
        #do some things here

Нужна ли строка implements(I1) или ZCA самостоятельно может определить, что реализует U1I1 (вроде как работают интерфейсы в Go)?

1 Ответ

4 голосов
/ 28 декабря 2011

Компонент не должен указывать это. Интерфейс для компонента особенно важен, когда он зарегистрирован в реестре компонентов, поскольку поиск компонентов выполняется на интерфейсах.

Вы можете указать реестру компонента, какой интерфейс реализует компонент, несколькими способами. Одним из наиболее распространенных способов является использование вызова Implements () для самого компонента. Вы также можете указать реестру компонента, какие интерфейсы он реализует при регистрации компонента.

Существуют также функции для проверки того, реализует ли компонент определенный интерфейс, в основном используемый в тестах.

Так что да, интерфейсы в ZCA работают во многом так же, как в Go, но с добавлением реестра компонентов (если у Go этого нет, но я его пропустил, я не эксперт по Go), где вы можете быстро посмотреть компоненты на основе интерфейсов и имен.

...