2011-12-28 5 views
2

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

Учитывая, например:

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 работы)?

ответ

4

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

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

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

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