Нужно ли компоненту Zope Component Architecture указывать интерфейсы, которые он реализует?
Примечание: я новичок в 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 может самостоятельно определить, что U1 реализует I1 (вроде как работают интерфейсы в Go)?
1 ответ
Компонент не должен указывать это. Интерфейс для компонента особенно важен, когда он зарегистрирован в реестре компонентов, так как поиск компонентов выполняется на интерфейсах.
Вы можете указать в реестре компонентов, какой интерфейс реализует компонент, несколькими способами. Одним из наиболее распространенных способов является использование вызова Implements() для самого компонента. Вы также можете указать реестру компонента, какие интерфейсы он реализует при регистрации компонента.
Существуют также функции для проверки того, реализует ли компонент определенный интерфейс, в основном используемый в тестах.
Так что да, интерфейсы в ZCA работают во многом так же, как и в Go, но с добавлением реестра компонентов (если у Go этого нет, но я его пропустил, я не эксперт Go), где вы можете быстро искать компоненты на основе на интерфейсах и именах.