Уведомления

Группа в Telegram: @pythonsu

#1 Май 26, 2011 17:27:29

Юрчек
От:
Зарегистрирован: 2009-04-14
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

zope.interface

Можно мне простыми словами объяснить зачем он используется? А то документацию читал, примеры смотрел, но смысл как-то ускользает.



Офлайн

#2 Май 26, 2011 17:37:24

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

zope.interface

1. Это реализация шаблона “Интерфейс” не на уровне интерпретатора, а средствами языка.
2. Удобное средство документирования кода, в т.ч. генерации документации.
3. Используется в фреймворке Twisted для см. пункт 2
4. Используется как основа для компонентной архитектуры ZCA.
… и еще, наверное, где-то =)



Офлайн

#3 Май 26, 2011 21:52:19

Юрчек
От:
Зарегистрирован: 2009-04-14
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

zope.interface

regall
1. Это реализация шаблона “Интерфейс” не на уровне интерпретатора, а средствами языка.
2. Удобное средство документирования кода, в т.ч. генерации документации.
3. Используется в фреймворке Twisted для см. пункт 2
4. Используется как основа для компонентной архитектуры ZCA.
… и еще, наверное, где-то =)
Я как раз разбираюсь с модулем на twisted. Называется fats. И читал, что используется для документации. Но вот как именно? Можно живой пример в несколько строк.



Офлайн

#4 Май 27, 2011 09:35:00

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

zope.interface

Не совсем понял, что вы хотите узнать ) Пример использования fats или пример использования интерфейсов?



Офлайн

#5 Май 27, 2011 10:38:41

Юрчек
От:
Зарегистрирован: 2009-04-14
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

zope.interface

regall
Не совсем понял, что вы хотите узнать ) Пример использования fats или пример использования интерфейсов?
Сейчас читаю книжку по twisted, но там Interface не упоминается или я еще не дошел до той страницы))

Вот пример из fats
http://pastebin.com/VqHBxTWW

Зачем там IHelloFastAGIService? Что он делает? Можно же и без него. Я не понимаю, какое преимущество он дает.



Офлайн

#6 Май 27, 2011 10:50:23

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

zope.interface

Юрчек
Сейчас читаю книжку по twisted, но там Interface не упоминается или я еще не дошел до той страницы))
По большому счету для разработки на twisted вам знать про zope.interface ничего не нужно.
Юрчек
Зачем там IHelloFastAGIService? Что он делает? Можно же и без него. Я не понимаю, какое преимущество он дает.
Если вы захотите предоставить свою реализацию этого сервиса, вас следует глянуть в интерфейс и просто релизовать все методы, которые присутствуют в интерфейсе. Это есть достаточное уловие для того (если вы все правильно реализовали), что ваша реализация может быть использована взамен стандартной.

Еще пример. Например, IProtocol: http://twistedmatrix.com/documents/8.1.0/api/twisted.internet.interfaces.IProtocol.html
Как видите, в интерфейсе есть 4 метода. Вам нужно добавить в свое приложение свой протокол или реализацию какого-то, какого нет в стандартной библиотеке. В таком случае вы делаете класс, который реализовывает эти 4 метода согласно документации по ним в докстрингах, и он будет правильно работать в инфраструктуре twisted. То есть реализация протокола может иметь и дополнительные методы, но если какой-то метод в реализации (классе протокола) отсутствует, он уже не будет правильно работать в twisted-приложении.



Офлайн

#7 Май 27, 2011 10:55:57

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

zope.interface

В вашем примере кода, на который вы дали ссылки есть пример регистрации адаптера:

components.registerAdapter(HelloFastAGIFactoryFromService,
IHelloFastAGIService,
IFastAGIFactory)
Что это значит? Это значит, что класс HelloFastAGIFactoryFromService выполняет приведение интерфейса IHelloFastAGIService к интерфейсу IFastAGIFactory. То есть если вас этот класс не устраивает, вам можно написать свой, зарегистрировать, а в программе вызвать его с помощью функции queryAdapter (не помню точный порядок аргументов). Также вы можете использовать прямое приведение. Например,
IFastAGIFactory(some_class)
Результатом этой конструкции в данном случае будет как раз экземпляр класса HelloFastAGIFactoryFromService. Если зарегистрируете другой - будет другой. Таким образом вы ограждаете себя от реализации, взаимодействуя только по интерфейсам (это основа Zope Component Architecture)



Офлайн

#8 Май 27, 2011 14:15:06

Юрчек
От:
Зарегистрирован: 2009-04-14
Сообщения: 45
Репутация: +  0  -
Профиль   Отправить e-mail  

zope.interface

Почитал вики Шаблон Интерфейс. Много думал, оговорюсь, что высшего программистского образования я не имею. Я правильно понял, что например у меня есть какой-то код, который использует какой-то интерфейс. Потом я могу подменить реализацию этого интерфейса а тот код, который его использует продолжить работать. А с zope.Interface это можно делать динамически прямо во время выполнения?



Офлайн

#9 Май 30, 2011 15:43:39

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

zope.interface

Юрчек
Потом я могу подменить реализацию этого интерфейса а тот код, который его использует продолжить работать.
Верно.
Юрчек
А с zope.Interface это можно делать динамически прямо во время выполнения?
В питоне практически все можно во время выполнения, но только делать этого не надо :) zope.interface это программная реализация шаблона Интерфейс с доп. плюшками типа интроспекции, а вот подменять ничего не надо.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version