Repository URL to install this package:
|
Version:
4.1.2 ▾
|
cdocutils.nodes
document
q)q}q(UtagnameqUdocumentqUreporterqNU
attributesq}q(Udupnamesq ]Ubackrefsq
]UsourceX@ /home/tseaver/projects/Zope/Z3/zope.interface/docs/README.ru.rstqUidsq]Uclassesq
]Unamesq]uUparse_messagesq]qU
decorationqNU citationsq]qU rawsourceqU U nametypesq}q(X+ объявление интерфейсовqNX compatqXR наследование в случае определения атрибутовqNX- определение интерфейсовqNX factoryqXB объявление реализуемых интерфейсовqNX спецификацииqNX инвариантыqNX# внешние объявленияqNX contentsq NX# объекты объявленийq!NX/ наследование интерфейсовq"NX интерфейсыq#NX __adapt__q$NX адаптацияq%NXJ объявление предоставляемых интерфейсовq&NX createq'X+ наследуемые объявленияq(NX% помеченные значенияq)NuUsettingsq*(cdocutils.frontend
Values
q+oq,}q-(Upep_referencesq.NUoutput_encoding_error_handlerq/Ustrictq0U
halt_levelq1KU
source_urlq2NU
dump_settingsq3NUdoctitle_xformq4Udump_pseudo_xmlq5NU tab_widthq6KU id_prefixq7U Utitleq8NUembed_stylesheetq9U
docinfo_xformq:KUfootnote_backlinksq;KUerror_encodingq<UUTF-8q=Uauto_id_prefixq>Uidq?U
language_codeq@UenqAU datestampqBNUdump_transformsqCNUoutput_encodingqDUutf-8qEUexit_status_levelqFKUstrict_visitorqGNU_disable_configqHNUfile_insertion_enabledqIU tracebackqJUrecord_dependenciesqKNUstrip_commentsqLNUdebugqMNU generatorqNNUgettext_compactqOUenvqPNU
strip_classesqQNUpep_file_url_templateqRUpep-%04dqSUinput_encoding_error_handlerqTh0Uexpose_internalsqUNUrfc_referencesqVNU
toc_backlinksqWUentryqXUtrim_footnote_reference_spaceqYU_sourceqZhUwarning_streamq[NUinput_encodingq\U utf-8-sigq]Usectsubtitle_xformq^Usource_linkq_NUconfigq`NU
sectnum_xformqaKUerror_encoding_error_handlerqbUbackslashreplaceqcU
_config_filesqd]Udump_internalsqeNUsmart_quotesqfUcloak_email_addressesqgUraw_enabledqhKUstrip_elements_with_classesqiNUpep_base_urlqjU https://www.python.org/dev/peps/qkUreport_levelqlKUrfc_base_urlqmUhttps://tools.ietf.org/html/qnU_destinationqoNUsyntax_highlightqpUlongqqubUautofootnote_refsqr]qs(cdocutils.nodes
footnote_reference
qt)qu}qv(hUfootnote_referenceqwh}qx(h ]h
]UrefidqyUcreateqzh
]h]q{Uid3q|aUautoq}Kh]uhX
[#create]_Uresolvedq~KUparentqcdocutils.nodes
paragraph
q)q}q(hhhU paragraphqh}q(h
]h ]h]h]h
]uUlineq
K%UsourceqhhX В примере выше мы создали интерфейс `IFoo`. Мы наследуем его от
класса `zope.interface.Interface`, который является родительским интерфейсом
для всех интерфейсов, как `object` - это родительский класс для всех новых
классов [#create]_. Данный интерфейс не является классом, а является
Интерфейсом, экземпляром `InterfaceClass`::hcdocutils.nodes
section
q)q}q(hhhUsectionqh}q(h
]h ]h]qhah]qUid2qah
]uh
KhhhU hh)q}q(hhhhh}q(h
]h ]h]qh#ah]qUid1qah
]uh
KhhhU hhUchildrenq]q(cdocutils.nodes
title
q)q}q(hhhh8h}q(h ]h
]hyUid18qh
]h]h]uh
KhhhX Интерфейсыqhhh]qcdocutils.nodes
Text
qX Интерфейсыq
q }q¡(hhhhubaubcdocutils.nodes
topic
q¢)q£}q¤(hhhUtopicq¥h}q¦(h
]h ]h]q§h ah]q¨Ucontentsq©ah
]qªUcontentsq«auh
KhhhU hhh]q¬(h)q}q®(hU hh8h}q¯(h
]h ]h]h]h
]uhh£h]q°hX Contentsq±
q²}q³(hU hhubaubcdocutils.nodes
bullet_list
q´)qµ}q¶(hhhUbullet_listq·h}q¸(h
]h ]h]h]h
]uh
NhNhU hh£h]q¹cdocutils.nodes
list_item
qº)q»}q¼(hU hU list_itemq½h}q¾(h
]h ]h]h]h
]uhhµh]q¿(h)qÀ}qÁ(hU hhh}qÂ(h
]h ]h]h]h
]uhh»h]qÃcdocutils.nodes
reference
qÄ)qÅ}qÆ(hU hU referenceqÇh}qÈ(h ]h
]Urefidhh
]h]qÉhah]uhhÀh]qÊhX Интерфейсыq˅qÌ}qÍ(hhhhÅubaubaubh´)qÎ}qÏ(hU hh·h}qÐ(h
]h ]h]h]h
]uhh»h]qÑ(hº)qÒ}qÓ(hU hh½h}qÔ(h
]h ]h]h]h
]uhhÎh]qÕh)qÖ}q×(hU hhh}qØ(h
]h ]h]h]h
]uhhÒh]qÙhÄ)qÚ}qÛ(hU hhÇh}qÜ(h ]h
]Urefidhh
]h]qÝUid19qÞah]uhhÖh]qßhX- Определение интерфейсовqŁqá}qâ(hX- Определение интерфейсовqãhhÚubaubaubaubhº)qä}qå(hU hh½h}qæ(h
]h ]h]h]h
]uhhÎh]qç(h)qè}qé(hU hhh}qê(h
]h ]h]h]h
]uhhäh]qëhÄ)qì}qí(hU hhÇh}qî(h ]h
]UrefidUid4qïh
]h]qðUid20qñah]uhhèh]qòhX+ Объявление интерфейсовqó
qô}qõ(hX+ Объявление интерфейсовqöhhìubaubaubh´)q÷}qø(hU hh·h}qù(h
]h ]h]h]h
]uhhäh]qú(hº)qû}qü(hU hh½h}qý(h
]h ]h]h]h
]uhh÷h]qþh)qÿ}r (hU hhh}r (h
]h ]h]h]h
]uhhûh]r hÄ)r }r (hU hhÇh}r (h ]h
]UrefidUid6r h
]h]r Uid21r ah]uhhÿh]r hXB Объявление реализуемых интерфейсовr
r }r (hXB Объявление реализуемых интерфейсовr
hj ubaubaubaubhº)r }r (hU hh½h}r (h
]h ]h]h]h
]uhh÷h]r h)r }r (hU hhh}r (h
]h ]h]h]h
]uhj h]r hÄ)r }r (hU hhÇh}r (h ]h
]UrefidUid7r h
]h]r Uid22r ah]uhj h]r hXJ Объявление предоставляемых интерфейсовr
r }r (hXJ Объявление предоставляемых интерфейсовr hj ubaubaubaubhº)r! }r" (hU hh½h}r# (h
]h ]h]h]h
]uhh÷h]r$ h)r% }r& (hU hhh}r' (h
]h ]h]h]h
]uhj! h]r( hÄ)r) }r* (hU hhÇh}r+ (h ]h
]UrefidUid8r, h
]h]r- Uid23r. ah]uhj% h]r/ hX+ Наследуемые объявленияr0
r1 }r2 (hX+ Наследуемые объявленияr3 hj) ubaubaubaubhº)r4 }r5 (hU hh½h}r6 (h
]h ]h]h]h
]uhh÷h]r7 h)r8 }r9 (hU hhh}r: (h
]h ]h]h]h
]uhj4 h]r; hÄ)r< }r= (hU hhÇh}r> (h ]h
]UrefidUid9r? h
]h]r@ Uid24rA ah]uhj8 h]rB hX# Внешние объявленияrC
rD }rE (hX# Внешние объявленияrF hj< ubaubaubaubhº)rG }rH (hU hh½h}rI (h
]h ]h]h]h
]uhh÷h]rJ h)rK }rL (hU hhh}rM (h
]h ]h]h]h
]uhjG h]rN hÄ)rO }rP (hU hhÇh}rQ (h ]h
]UrefidUid10rR h
]h]rS Uid25rT ah]uhjK h]rU hX# Объекты объявленийrV
rW }rX (hX# Объекты объявленийrY hjO ubaubaubaubeubeubhº)rZ }r[ (hU hh½h}r\ (h
]h ]h]h]h
]uhhÎh]r] (h)r^ }r_ (hU hhh}r` (h
]h ]h]h]h
]uhjZ h]ra hÄ)rb }rc (hU hhÇh}rd (h ]h
]UrefidUid11re h
]h]rf Uid26rg ah]uhj^ h]rh hX/ Наследование интерфейсовri
rj }rk (hX/ Наследование интерфейсовrl hjb ubaubaubh´)rm }rn (hU hh·h}ro (h
]h ]h]h]h
]uhjZ h]rp (hº)rq }rr (hU hh½h}rs (h
]h ]h]h]h
]uhjm h]rt h)ru }rv (hU hhh}rw (h
]h ]h]h]h
]uhjq h]rx hÄ)ry }rz (hU hhÇh}r{ (h ]h
]UrefidUid13r| h
]h]r} Uid27r~ ah]uhju h]r hXR Наследование в случае определения атрибутовr
r }r (hXR Наследование в случае определения атрибутовr hjy ubaubaubaubhº)r }r
(hU hh½h}r (h
]h ]h]h]h
]uhjm h]r h)r }r (hU hhh}r (h
]h ]h]h]h
]uhj h]r hÄ)r }r (hU hhÇh}r (h ]h
]UrefidUid14r h
]h]r Uid28r ah]uhj h]r hX Спецификацииr
r }r (hX Спецификацииr hj ubaubaubaubeubeubhº)r }r (hU hh½h}r (h
]h ]h]h]h
]uhhÎh]r h)r }r (hU hhh}r (h
]h ]h]h]h
]uhj h]r hÄ)r }r (hU hhÇh}r¡ (h ]h
]UrefidUid15r¢ h
]h]r£ Uid29r¤ ah]uhj h]r¥ hX% Помеченные значенияr¦
r§ }r¨ (hX% Помеченные значенияr© hj ubaubaubaubhº)rª }r« (hU hh½h}r¬ (h
]h ]h]h]h
]uhhÎh]r h)r® }r¯ (hU hhh}r° (h
]h ]h]h]h
]uhjª h]r± hÄ)r² }r³ (hU hhÇh}r´ (h ]h
]UrefidUid16rµ h
]h]r¶ Uid30r· ah]uhj® h]r¸ hX Инвариантыr¹
rº }r» (hX Инвариантыr¼ hj² ubaubaubaubhº)r½ }r¾ (hU hh½h}r¿ (h
]h ]h]h]h
]uhhÎh]rÀ (h)rÁ }r (hU hhh}rà (h
]h ]h]h]h
]uhj½ h]rÄ hÄ)rÅ }rÆ (hU hhÇh}rÇ (h ]h
]UrefidUid17rÈ h
]h]rÉ Uid31rÊ ah]uhjÁ h]rË hX АдаптацияrÌ
rÍ }rÎ (hX АдаптацияrÏ hjÅ ubaubaubh´)rÐ }rÑ (hU hh·h}rÒ (h
]h ]h]h]h
]uhj½ h]rÓ hº)rÔ }rÕ (hU hh½h}rÖ (h
]h ]h]h]h
]uhjÐ h]r× h)rØ }rÙ (hU hhh}rÚ (h
]h ]h]h]h
]uhjÔ h]rÛ hÄ)rÜ }rÝ (hU hhÇh}rÞ (h ]h
]UrefidUadaptrß h
]h]rà Uid32rá ah]uhjØ h]râ hX __adapt__rã
rä }rå (hX __adapt__ræ hjÜ ubaubaubaubaubeubeubeubaubeubh)rç }rè (hhhhh}ré (h
]h ]h]h]h
]uh
KhhhXF Интерфейсы - это объекты специфицирующие (документирующие) внешнее поведение
объектов которые их "предоставляют". Интерфейсы определяют поведение через
следующие составляющие:rê hhh]rë hXF Интерфейсы - это объекты специфицирующие (документирующие) внешнее поведение
объектов которые их "предоставляют". Интерфейсы определяют поведение через
следующие составляющие:rì
rí }rî (hjê hjç ubaubh´)rï }rð (hhhh·h}rñ (h ]h
]h
]h]Ubulletrò X -h]uh
KhhhU hhh]ró (hº)rô }rõ (hhhh½h}rö (h
]h ]h]h]h
]uh
NhhhX] Неформальную документацию в строках документации
hjï h]r÷ h)rø }rù (hhh}rú (h
]h ]h]h]h
]uh
KhhhX\ Неформальную документацию в строках документацииrû hjô h]rü hX\ Неформальную документацию в строках документацииrý
rþ }rÿ (hjû hjø ubaubaubhº)r }r (hhhh½h}r (h
]h ]h]h]h
]uh
NhhhX* Определения атрибутов
hjï h]r h)r }r (hhh}r (h
]h ]h]h]h
]uh
K
hhhX) Определения атрибутовr hj h]r hX) Определения атрибутовr
r
}r (hj hj ubaubaubhº)r }r
(hhhh½h}r (h
]h ]h]h]h
]uh
NhhhX¤ Инварианты - условия, которые должны соблюдаться для объектов предоставляющих
интерфейс
hjï h]r h)r }r (hhh}r (h
]h ]h]h]h
]uh
KhhhX£ Инварианты - условия, которые должны соблюдаться для объектов предоставляющих
интерфейсr hj h]r hX£ Инварианты - условия, которые должны соблюдаться для объектов предоставляющих
интерфейсr
r }r (hj hj ubaubaubeubh)r }r (hhhhh}r (h
]h ]h]h]h
]uh
KhhhX¤ Определения атрибутов описывают конкретные атрибуты. Они определяют
имя атрибута и предоставляют документацию и ограничения для значений
атрибута. Определения атрибутов могут быть заданы несколькими путями
как мы увидим ниже.r hhh]r hX¤ Определения атрибутов описывают конкретные атрибуты. Они определяют
имя атрибута и предоставляют документацию и ограничения для значений
атрибута. Определения атрибутов могут быть заданы несколькими путями
как мы увидим ниже.r
r }r (hj hj ubaubhh)r }r! (hhhhh}r" (h
]h ]h]r# hah]r$ hïah
]uh
KhhhU hhh]r% (h)r& }r' (hhhh8h}r( (h ]h
]hyhñh
]h]h]uh
Khhhhöhj h]r) hX+ Объявление интерфейсовr*
r+ }r, (hhöhj& ubaubh)r- }r. (hhhhh}r/ (h
]h ]h]h]h
]uh
KhhhXð Определив интерфейс мы можем теперь *объявить*, что объекты предоставляют их.
Перед описанием деталей определим некоторые термины:hj h]r0 (hXC Определив интерфейс мы можем теперь r1
r2 }r3 (hXC Определив интерфейс мы можем теперь hj- ubcdocutils.nodes
emphasis
r4 )r5 }r6 (hX *объявить*hUemphasisr7 h}r8 (h
]h ]h]h]h
]uhj- h]r9 hX объявитьr:
r; }r< (hU hj5 ubaubhX , что объекты предоставляют их.
Перед описанием деталей определим некоторые термины:r=
r> }r? (hX , что объекты предоставляют их.
Перед описанием деталей определим некоторые термины:hj- ubeubcdocutils.nodes
definition_list
r@ )rA }rB (hhhUdefinition_listrC h}rD (h
]h ]h]h]h
]uh
NhhhU hj h]rE (cdocutils.nodes
definition_list_item
rF )rG }rH (hUdefinition_list_itemrI h}rJ (h
]h ]h]h]h
]uh
KhhhX¿ *предоставлять*
Мы говорим, что объекты *предоставляют* интерфейсы. Если объект
предоставляет интерфейс, тогда интерфейс специфицирует поведение объекта.
Другими словами, интерфейсы специфицируют поведение объектов которые
предоставляют их.
hjA h]rK (cdocutils.nodes
term
rL )rM }rN (hUtermrO h}rP (h
]h ]h]h]h
]uh
KhhhX *предоставлять*rQ hjG h]rR j4 )rS }rT (hjQ hj7 h}rU (h
]h ]h]h]h
]uhjM h]rV hX предоставлятьrW
rX }rY (hU hjS ubaubaubcdocutils.nodes
definition
rZ )r[ }r\ (hU hU
definitionr] h}r^ (h
]h ]h]h]h
]uhjG h]r_ h)r` }ra (hhh}rb (h
]h ]h]h]h
]uh
KhhhX¡ Мы говорим, что объекты *предоставляют* интерфейсы. Если объект
предоставляет интерфейс, тогда интерфейс специфицирует поведение объекта.
Другими словами, интерфейсы специфицируют поведение объектов которые
предоставляют их.hj[ h]rc (hX+ Мы говорим, что объекты rd
re }rf (hX+ Мы говорим, что объекты hj` ubj4 )rg }rh (hX *предоставляют*hj7 h}ri (h
]h ]h]h]h
]uhj` h]rj hX предоставляютrk
rl }rm (hU hjg ubaubhXZ интерфейсы. Если объект
предоставляет интерфейс, тогда интерфейс специфицирует поведение объекта.
Другими словами, интерфейсы специфицируют поведение объектов которые
предоставляют их.rn
ro }rp (hXZ интерфейсы. Если объект
предоставляет интерфейс, тогда интерфейс специфицирует поведение объекта.
Другими словами, интерфейсы специфицируют поведение объектов которые
предоставляют их.hj` ubeubaubeubjF )rq }rr (hhhjI h}rs (h
]h ]h]h]h
]uh
KhhhXh *реализовать*
Мы обычно говорим что классы *реализуют* интерфейсы. Если класс
реализует интерфейс, тогда экземпляры этого класса предоставляют
данный интерфейс. Объекты предоставляют интерфейсы которые их классы
реализуют [#factory]_. (Объекты также могут предоставлять интерфейсы напрямую
плюс к тем которые реализуют их классы.)
Важно помнить, что классы обычно не предоставляют интерфейсы которые
они реализуют.
Мы можем обобщить это до фабрик. Для любого вызываемого объекта мы можем
объявить что он производит объекты которые предоставляют какие-либо
интерфейсы сказав, что фабрика реализует данные интерфейсы.
hjA h]rt (jL )ru }rv (hjO h}rw (h
]h ]h]h]h
]uh
KhhhX *реализовать*rx hjq h]ry j4 )rz }r{ (hjx hj7 h}r| (h
]h ]h]h]h
]uhju h]r} hX реализоватьr~
r }r (hU hjz ubaubaubjZ )r }r (hU hj] h}r (h
]h ]h]h]h
]uhjq h]r (h)r
}r (hhh}r (h
]h ]h]h]h
]uh
KhhhX> Мы обычно говорим что классы *реализуют* интерфейсы. Если класс
реализует интерфейс, тогда экземпляры этого класса предоставляют
данный интерфейс. Объекты предоставляют интерфейсы которые их классы
реализуют [#factory]_. (Объекты также могут предоставлять интерфейсы напрямую
плюс к тем которые реализуют их классы.)hj h]r (hX5 Мы обычно говорим что классы r
r }r (hX5 Мы обычно говорим что классы hj
ubj4 )r }r (hX *реализуют*hj7 h}r (h
]h ]h]h]h
]uhj
h]r hX реализуютr
r }r (hU hj ubaubhX9 интерфейсы. Если класс
реализует интерфейс, тогда экземпляры этого класса предоставляют
данный интерфейс. Объекты предоставляют интерфейсы которые их классы
реализуют r
r }r (hX9 интерфейсы. Если класс
реализует интерфейс, тогда экземпляры этого класса предоставляют
данный интерфейс. Объекты предоставляют интерфейсы которые их классы
реализуют hj
ubht)r }r (hhwh}r (h ]h
]hyUfactoryr h
]h]r Uid5r ah}Kh]uhX [#factory]_h~Khj
h]r hX 2
r }r (hU hj ubaubhX± . (Объекты также могут предоставлять интерфейсы напрямую
плюс к тем которые реализуют их классы.)r
r }r¡ (hX± . (Объекты также могут предоставлять интерфейсы напрямую
плюс к тем которые реализуют их классы.)hj
ubeubh)r¢ }r£ (hhh}r¤ (h
]h ]h]h]h
]uh
KhhhX Важно помнить, что классы обычно не предоставляют интерфейсы которые
они реализуют.r¥ hj h]r¦ hX Важно помнить, что классы обычно не предоставляют интерфейсы которые
они реализуют.r§
r¨ }r© (hj¥ hj¢ ubaubh)rª }r« (hhh}r¬ (h
]h ]h]h]h
]uh
KhhhXr Мы можем обобщить это до фабрик. Для любого вызываемого объекта мы можем
объявить что он производит объекты которые предоставляют какие-либо
интерфейсы сказав, что фабрика реализует данные интерфейсы.r hj h]r® hXr Мы можем обобщить это до фабрик. Для любого вызываемого объекта мы можем
объявить что он производит объекты которые предоставляют какие-либо
интерфейсы сказав, что фабрика реализует данные интерфейсы.r¯
r° }r± (hj hjª ubaubeubeubeubh)r² }r³ (hhhhh}r´ (h
]h ]h]h]h
]uh
KhhhX¹ Теперь после того как мы определили эти термины мы можем поговорить об
API для объявления интерфейсов.rµ hj h]r¶ hX¹ Теперь после того как мы определили эти термины мы можем поговорить об
API для объявления интерфейсов.r·
r¸ }r¹ (hjµ hj² ubaubh)rº }r» (hhhhh}r¼ (h
]h ]h]r½ hah]r¾ j ah
]uh
KhhhU hj h]r¿ (h)rÀ }rÁ (hhhh8h}r (h ]h
]hyj h
]h]h]uh
Khhhj
hjº h]rà hXB Объявление реализуемых интерфейсовrÄ
rÅ }rÆ (hj
hjÀ ubaubh)rÇ }rÈ (hhhhh}rÉ (h
]h ]h]h]h
]uh
KhhhX× Наиболее часто используемый путь для объявления интерфейсов - это использование
функции implements в определении класса::hjº h]rÊ hXÖ Наиболее часто используемый путь для объявления интерфейсов - это использование
функции implements в определении класса:rË
rÌ }rÍ (hXÖ Наиболее часто используемый путь для объявления интерфейсов - это использование
функции implements в определении класса:hjÇ ubaubcdocutils.nodes
literal_block
rÎ )rÏ }rÐ (hhhU
literal_blockrÑ h}rÒ (h ]h
]U xml:spacerÓ UpreserverÔ h
]h]h]uh
K¢hhhX >>> class Foo:
... zope.interface.implements(IFoo)
...
... def __init__(self, x=None):
... self.x = x
...
... def bar(self, q, r=None):
... return q, r, self.x
...
... def __repr__(self):
... return "Foo(%s)" % self.xhjº h]rÕ hX >>> class Foo:
... zope.interface.implements(IFoo)
...
... def __init__(self, x=None):
... self.x = x
...
... def bar(self, q, r=None):
... return q, r, self.x
...
... def __repr__(self):
... return "Foo(%s)" % self.xrÖ
r× }rØ (hU hjÏ ubaubh)rÙ }rÚ (hhhhh}rÛ (h
]h ]h]h]h
]uh
K®hhhX¨ В этом примере мы объявили, что `Foo` реализует `IFoo`. Это значит, что
экземпляры `Foo` предоставляют `IFoo`. После данного объявления есть
несколько путей для анализа объявлений. Во-первых мы можем спросить
что интерфейс реализован классом::hjº h]rÜ (hX9 В этом примере мы объявили, что rÝ
rÞ }rß (hX9 В этом примере мы объявили, что hjÙ ubcdocutils.nodes
title_reference
rà )rá }râ (hX `Foo`hUtitle_referencerã h}rä (h
]h ]h]h]h
]uhjÙ h]rå hX Fooræ
rç }rè (hU hjá ubaubhX реализует ré
rê }rë (hX реализует hjÙ ubjà )rì }rí (hX `IFoo`hjã h}rî (h
]h ]h]h]h
]uhjÙ h]rï hX IFoorð
rñ }rò (hU hjì ubaubhX3 . Это значит, что
экземпляры ró
rô }rõ (hX3 . Это значит, что
экземпляры hjÙ ubjà )rö }r÷ (hX `Foo`hjã h}rø (h
]h ]h]h]h
]uhjÙ h]rù hX Foorú
rû }rü (hU hjö ubaubhX предоставляют rý
rþ }rÿ (hX предоставляют hjÙ ubjà )r }r (hX `IFoo`hjã h}r (h
]h ]h]h]h
]uhjÙ h]r hX IFoor
r }r (hU hj ubaubhXõ . После данного объявления есть
несколько путей для анализа объявлений. Во-первых мы можем спросить
что интерфейс реализован классом:r
r }r (hXõ . После данного объявления есть
несколько путей для анализа объявлений. Во-первых мы можем спросить
что интерфейс реализован классом:hjÙ ubeubjÎ )r
}r (hhhjÑ h}r (h ]h
]jÓ jÔ h
]h]h]uh
K³hhhX >>> IFoo.implementedBy(Foo)
Truehjº h]r
hX >>> IFoo.implementedBy(Foo)
Truer
r }r (hU hj
ubaubh)r }r (hhhhh}r (h
]h ]h]h]h
]uh
K¶hhhX Также мы можем спросить если интерфейс предоставляется объектами класса::r hjº h]r hX Также мы можем спросить если интерфейс предоставляется объектами класса:r
r }r (hX Также мы можем спросить если интерфейс предоставляется объектами класса:hj ubaubjÎ )r }r (hhhjÑ h}r (h ]h
]jÓ jÔ h
]h]h]uh
K¸hhhX- >>> foo = Foo()
>>> IFoo.providedBy(foo)
Truehjº h]r hX- >>> foo = Foo()
>>> IFoo.providedBy(foo)
Truer
r }r (hU hj ubaubh)r }r! (hhhhh}r" (h
]h ]h]h]h
]uh
K¼hhhX] Конечно `Foo` не предоставляет `IFoo`, он реализует его::r# hjº h]r$ (hX Конечно r%
r& }r' (hX Конечно hj ubjà )r( }r) (hX `Foo`hjã h}r* (h
]h ]h]h]h
]uhj h]r+ hX Foor,
r- }r. (hU hj( ubaubhX! не предоставляет r/
r0 }r1 (hX! не предоставляет hj ubjà )r2 }r3 (hX `IFoo`hjã h}r4 (h
]h ]h]h]h
]uhj h]r5 hX IFoor6
r7 }r8 (hU hj2 ubaubhX! , он реализует его:r9
r: }r; (hX! , он реализует его:hj ubeubjÎ )r< }r= (hhhjÑ h}r> (h ]h
]jÓ jÔ h
]h]h]uh
K¾hhhX >>> IFoo.providedBy(Foo)
Falsehjº h]r? hX >>> IFoo.providedBy(Foo)
Falser@
rA }rB (hU hj< ubaubh)rC }rD (hhhhh}rE (h
]h ]h]h]h
]uh
KÁhhhXs Мы можем также узнать какие интерфейсы реализуются объектами::rF hjº h]rG hXr Мы можем также узнать какие интерфейсы реализуются объектами:rH
rI }rJ (hXr Мы можем также узнать какие интерфейсы реализуются объектами:hjC ubaubjÎ )rK }rL (hhhjÑ h}rM (h ]h
]jÓ jÔ h
]h]h]uh
KÃhhhXL >>> list(zope.interface.implementedBy(Foo))
[<InterfaceClass __main__.IFoo>]hjº h]rN hXL >>> list(zope.interface.implementedBy(Foo))
[<InterfaceClass __main__.IFoo>]rO
rP }rQ (hU hjK ubaubh)rR }rS (hhhhh}rT (h
]h ]h]h]h
]uh
KÆhhhX Это ошибка спрашивать про интерфейсы реализуемые не вызываемым объектом::rU hjº h]rV hX Это ошибка спрашивать про интерфейсы реализуемые не вызываемым объектом:rW
rX }rY (hX Это ошибка спрашивать про интерфейсы реализуемые не вызываемым объектом:hjR ubaubjÎ )rZ }r[ (hhhjÑ h}r\ (h ]h
]jÓ jÔ h
]h]h]uh
KÈhhhX >>> IFoo.implementedBy(foo)
Traceback (most recent call last):
...
TypeError: ('ImplementedBy called for non-factory', Foo(None))
>>> list(zope.interface.implementedBy(foo))
Traceback (most recent call last):
...
TypeError: ('ImplementedBy called for non-factory', Foo(None))hjº h]r] hX >>> IFoo.implementedBy(foo)
Traceback (most recent call last):
...
TypeError: ('ImplementedBy called for non-factory', Foo(None))
>>> list(zope.interface.implementedBy(foo))
Traceback (most recent call last):
...
TypeError: ('ImplementedBy called for non-factory', Foo(None))r^
r_ }r` (hU hjZ ubaubh)ra }rb (hhhhh}rc (h
]h ]h]h]h
]uh
KÒhhhXv Также можно узнать какие интерфейсы предоставляются объектами::rd hjº h]re hXu Также можно узнать какие интерфейсы предоставляются объектами:rf
rg }rh (hXu Также можно узнать какие интерфейсы предоставляются объектами:hja ubaubjÎ )ri }rj (hhhjÑ h}rk (h ]h
]jÓ jÔ h
]h]h]uh
KÔhhhXu >>> list(zope.interface.providedBy(foo))
[<InterfaceClass __main__.IFoo>]
>>> list(zope.interface.providedBy(Foo))
[]hjº h]rl hXu >>> list(zope.interface.providedBy(foo))
[<InterfaceClass __main__.IFoo>]
>>> list(zope.interface.providedBy(Foo))
[]rm
rn }ro (hU hji ubaubh)rp }rq (hhhhh}rr (h
]h ]h]h]h
]uh
KÙhhhXm Мы можем объявить интерфейсы реализуемые другими фабриками (кроме классов).
Это можно сделать используя декоратор `implementer` (в стиле Python 2.4).
Для версий Python ниже 2.4 это будет выглядеть следующим образом::hjº h]rs (hXÓ Мы можем объявить интерфейсы реализуемые другими фабриками (кроме классов).
Это можно сделать используя декоратор rt
ru }rv (hXÓ Мы можем объявить интерфейсы реализуемые другими фабриками (кроме классов).
Это можно сделать используя декоратор hjp ubjà )rw }rx (hX
`implementer`hjã h}ry (h
]h ]h]h]h
]uhjp h]rz hX implementerr{
r| }r} (hU hjw ubaubhX (в стиле Python 2.4).
Для версий Python ниже 2.4 это будет выглядеть следующим образом:r~
r }r (hX (в стиле Python 2.4).
Для версий Python ниже 2.4 это будет выглядеть следующим образом:hjp ubeubjÎ )r }r (hhhjÑ h}r (h ]h
]jÓ jÔ h
]h]h]uh
KÝhhhXÊ >>> def yfoo(y):
... foo = Foo()
... foo.y = y
... return foo
>>> yfoo = zope.interface.implementer(IFoo)(yfoo)
>>> list(zope.interface.implementedBy(yfoo))
[<InterfaceClass __main__.IFoo>]hjº h]r hXÊ >>> def yfoo(y):
... foo = Foo()
... foo.y = y
... return foo
>>> yfoo = zope.interface.implementer(IFoo)(yfoo)
>>> list(zope.interface.implementedBy(yfoo))
[<InterfaceClass __main__.IFoo>]r
r }r (hU hj ubaubh)r }r (hhhhh}r (h
]h ]h]h]h
]uh
KæhhhX$ Надо заметить, что декоратор implementer может модифицировать свои аргументы.
Вызывающая сторона не должна предполагать, что всегда будет создаваться
новый объект.r hjº h]r hX$ Надо заметить, что декоратор implementer может модифицировать свои аргументы.
Вызывающая сторона не должна предполагать, что всегда будет создаваться
новый объект.r
r }r (hj hj ubaubh)r }r (hhhhh}r (h
]h ]h]h]h
]uh
KêhhhXM XXX: Double check and update these version numbers, and translate to russian:r hjº h]r hXM XXX: Double check and update these version numbers, and translate to russian:r
r }r (hj hj ubaubh)r }r (hhhhh}r (h
]h ]h]h]h
]uh
KìhhhXz In zope.interface 3.5.1 and lower, the implementer decorator can not
be used for classes, but in 3.5.2 and higher it can::hjº h]r hXy In zope.interface 3.5.1 and lower, the implementer decorator can not
be used for classes, but in 3.5.2 and higher it can:r
r }r (hXy In zope.interface 3.5.1 and lower, the implementer decorator can not
be used for classes, but in 3.5.2 and higher it can:hj ubaubjÎ )r }r (hhhjÑ h}r¡ (h ]h
]jÓ jÔ h
]h]h]uh
KïhhhX{ >>> Foo = zope.interface.implementer(IFoo)(Foo)
>>> list(zope.interface.providedBy(Foo()))
[<InterfaceClass __main__.IFoo>]hjº h]r¢ hX{ >>> Foo = zope.interface.implementer(IFoo)(Foo)
>>> list(zope.interface.providedBy(Foo()))
[<InterfaceClass __main__.IFoo>]r£
r¤ }r¥ (hU hj ubaubh)r¦ }r§ (hhhhh}r¨ (h
]h ]h]h]h
]uh
KóhhhXj Note that class decorators using the @implementer(IFoo) syntax are only
supported in Python 2.6 and later.r© hjº h]rª hXj Note that class decorators using the @implementer(IFoo) syntax are only
supported in Python 2.6 and later.r«
r¬ }r (hj© hj¦ ubaubeubh)r® }r¯ (hhhhh}r° (h
]h ]h]r± h&ah]r² j ah
]uh
KøhhhU hj h]r³ (h)r´ }rµ (hhhh8h}r¶ (h ]h
]hyj h
]h]h]uh
Køhhhj hj® h]r· hXJ Объявление предоставляемых интерфейсовr¸
r¹ }rº (hj hj´ ubaubh)r» }r¼ (hhhhh}r½ (h
]h ]h]h]h
]uh
KúhhhX Мы можем объявлять интерфейсы напрямую предоставляемые объектами. Предположим
что мы хотим документировать что делает метод `__init__` класса `Foo`. Это
*точно* не часть `IFoo`. Обычно мы не должны напрямую вызывать метод `__init__`
для экземпляров Foo. Скорее метод `__init__` является частью метода `__call__`
класса `Foo`::hj® h]r¾ (hXè Мы можем объявлять интерфейсы напрямую предоставляемые объектами. Предположим
что мы хотим документировать что делает метод r¿
rÀ }rÁ (hXè Мы можем объявлять интерфейсы напрямую предоставляемые объектами. Предположим
что мы хотим документировать что делает метод hj» ubjà )r }rà (hX
`__init__`hjã h}rÄ (h
]h ]h]h]h
]uhj» h]rÅ hX __init__rÆ
rÇ }rÈ (hU hj ubaubhX класса rÉ
rÊ }rË (hX класса hj» ubjà )rÌ }rÍ (hX `Foo`hjã h}rÎ (h
]h ]h]h]h
]uhj» h]rÏ hX FoorÐ
rÑ }rÒ (hU hjÌ ubaubhX . Это
rÓ
rÔ }rÕ (hX . Это
hj» ubj4 )rÖ }r× (hX *точно*hj7 h}rØ (h
]h ]h]h]h
]uhj» h]rÙ hX
точноrÚ
rÛ }rÜ (hU hjÖ ubaubhX не часть rÝ
rÞ }rß (hX не часть hj» ubjà )rà }rá (hX `IFoo`hjã h}râ (h
]h ]h]h]h
]uhj» h]rã hX IFoorä
rå }ræ (hU hjà ubaubhXS . Обычно мы не должны напрямую вызывать метод rç
rè }ré (hXS . Обычно мы не должны напрямую вызывать метод hj» ubjà )rê }rë (hX
`__init__`hjã h}rì (h
]h ]h]h]h
]uhj» h]rí hX __init__rî
rï }rð (hU hjê ubaubhX<