рдХреНрдпрд╛ рдЖрдк рдХрднреА рдПрдХ рддрд╛рдирд╛рд╢рд╛рд╣ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк
len(action.name)
рдмрдЬрд╛рдп
action.name.len()
рд▓рд┐рдЦрдиреЗ рдХрд╛ рд╕рдкрдирд╛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдк рдЕрдкрдиреЗ рдкрд╕рдВрджреАрджрд╛ рдкрд╛рдпрдерди рдореЗрдВ рд▓рдЪреАрд▓рд╛рдкрди рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдХреНрдпрд╛ рдЖрдкрдХреЛ рдмрддрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ? рддреЛ рдлрд┐рд░ рдЖрдЗрдП рдкрд╛рдЗрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдХреЗ рдХреБрдЫ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдЧреЛрддрд╛ рд▓рдЧрд╛рдПрдБ!
рдкрд╛рдпрдерди 2.7 рдореЗрдВ, рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕рднреА рдирд┐рд░реНрдорд┐рдд рд╡рд░реНрдЧ рдФрд░ рдХрдХреНрд╖рд╛рдПрдВ рдЕрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рд╣реИрдВред рдЕрд░реНрдерд╛рдд, рдЖрдк рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╡рд┐рдзрд┐ рдпрд╛ рдХреНрд╖реЗрддреНрд░ рдХреЛ рд╣рдЯрд╛ / рдЬреЛрдбрд╝ / рдмрджрд▓ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╢реБрджреНрдз рдкрд╛рдпрдерди рдореЗрдВ рдмрдирд╛рдИ рдЧрдИ рдХрдХреНрд╖рд╛рдПрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред
рдиреЛрдЯ: рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдирдИ рд╢реИрд▓реА рдХреА рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдкреБрд░рд╛рдиреА рд╢реИрд▓реА рд╕реЗ рдЕрд▓рдЧ рдирдИ рд╢реИрд▓реА рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдХреИрд╕реЗ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
www.python.org/doc/newstyleрдПрдХ рдЙрджрд╛рд╣рд░рдг:
class foo(object): def getA(self): return "A" x = foo() print x.getA()
рд▓реЗрдХрд┐рди рд╕реВрдЪреА рдпрд╛ рддрд╛рдирд╛рд╢рд╛рд╣ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рди рдЪрд╛рд▓ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧреАред
>>> list.length = len
TypeError: can't set attributes of built-in/extension type 'list'
рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЖрдХрд╕реНрдорд┐рдХ рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ,
list
рдФрд░
foo
рдПрдХ рд╣реА
type
рдореЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред рд▓реЗрдХрд┐рди рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рдЗрди рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХрдХреНрд╖рд╛ рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╕рдордп рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдХреНрдпреЛрдВ рдирд╣реАрдВ?
рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИ:
рдпрд╣рд╛рдВ (рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл),
рдпрд╣рд╛рдВ рдпрд╛
рдпрд╣рд╛рдВ рдЧреБрдЗрдбреЛ рд╡реИрди рд░реЛрд╕реБрдо рдХреА рд░рд╛рдпред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдПрдХ рд╣реА рдкрддреЗ рдХреА рдЬрдЧрд╣ рдореЗрдВ рдХрдИ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред
рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреБрдЫ рдЗрдирд▓рд╛рдЗрди рд╡рд┐рдзрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рднреА рд╣реИред рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде
string.__len__
рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реА рдореЗрдВ рд▓рд┐рдЦреЗ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдПрдкреАрдЖрдИ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, PyString_Size (...) рдлрд╝рдВрдХреНрд╢рди рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд░рд╣реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рдЕрд╕рдВрдЧрддрд┐ рд╕реВрдХреНрд╖реНрдо рдХреАрдбрд╝реЗ рдФрд░ рдЕрд╕реНрдкрд╖реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреА рд╣реИред
рдХреНрдпрд╛ рдХрд░реЗрдВ?
рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ ... рдкрд╛рдпрдерди 2.7 рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рд▓реЗ рд▓реЗрдВ (http://hg.python.org/cpython/ рдмрд╕ "2.7" рд╢рд╛рдЦрд╛ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ)ред рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЦреЛрдЬрдирд╛ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рдмрд╕ рдкрд╛рда рдХреЛ
"рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд / рд╡рд┐рд╕реНрддрд╛рд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЧреБрдг рд╕реЗрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ" рджреЗрдЦреЗрдВ ред рдлрд╝рдВрдХреНрд╢рди
"type_setattro"
рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдиреЗрдВ рдлрд╝рд╛рдЗрд▓
typeobject.c
рдореЗрдВ рд╣реИрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рддрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдкрд╛рдпрдерди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХ рд╡рд░реНрдЧ рдХреА рд╕рдВрдкрддреНрддрд┐ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдмрджрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреА рд╣реИред
type.__setattr__
рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдкрдардиреАрдп рд╣реИ
type.__setattr__
ред рд╣рдореЗрдВ рд░реЛрдХрдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдзрд┐рдХ рд╡рдлрд╛рджрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЖрдк рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
type.__setattr__
рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рднреА рдкреНрд░рдпрд╛рд╕
type.__setattr__
рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рдПрдХ рдкрд░рд┐рдЪрд┐рдд рдЕрдкрд╡рд╛рдж:
TypeError: can't set attributes of built-in/extension type 'type'
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк C-th рдореЙрдбреНрдпреВрд▓
type
рдФрд░
type
рдСрдмреНрдЬреЗрдХреНрдЯ рддрдХ рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди
"type_setattro"
рд▓рд┐рдП рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЗ рдмрдЬрд╛рдп
"type_setattro"
рдЖрдк
__setattr__
рд╡рд┐рдзрд┐ рдХреЗ рдЕрдкрдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдкрдиреНрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЪрд▓реЛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдУ!
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рд╕реА рдореЗрдВ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрдирд╛ рд╣реИред рдорд╛рдирдХ рдкреНрд░рд▓реЗрдЦрди рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдпрд╣ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдП (http://docs.python.org/extending/extending.html)ред рд╣рдорд╛рд░реЗ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди, рдХрдХреНрд╖рд╛рдПрдВ рдФрд░ рдлрд╝реАрд▓реНрдб рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд╕рднреА рдЬрд╛рджреВ рддрдм рд╣реЛрдЧрд╛ рдЬрдм рджреБрднрд╛рд╖рд┐рдпрд╛ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИред
#include <Python.h> static setattrofunc original_setattr_func = NULL; PyMODINIT_FUNC inittypehack(void) { PyObject *m; m = Py_InitModule("typehack", NULL); if (m == NULL) return; apply_patch(); } void apply_patch() { original_setattr_func = PyType_Type.tp_setattro;
PyType_Type
рдПрдХ рдРрд╕реА рд╕рдВрд░рдЪрдирд╛ рд╣реИ рдЬреЛ
type
PyType_Type
рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ: рдирд╛рдо, рдореЗрдореЛрд░реА рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЖрдХрд╛рд░, рдЭрдВрдбреЗред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдпрд╣ рдЙрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдореЗрдЯрд╛рдХреНрд▓рд╕ рдХреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред
рд╡рд╣ рд╕рдм рд╣реИред рдпрд╣
new_setattr_func
рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде
new_setattr_func
ред рдореИрдВ рдпрд╣рд╛рдВ рд╕рднреА рдХреЛрдб рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдХрд╛рдо рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
- рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рдлрд╝реАрд▓реНрдб рдФрд░ рддрд░реАрдХреЗ рдирд╣реАрдВ рдмрджрд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдХреЗрд╡рд▓ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
- рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдирдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝рддреЗ рд╕рдордп,
__dyn_attrs__
рдлрд╝реАрд▓реНрдб __dyn_attrs__
рдЬрд╛рддрд╛ __dyn_attrs__
, рдЬреЛ рд╕рднреА рдЬреЛрдбрд╝реЗ рдЧрдП рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдХреЗрд╡рд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдпрд╣ рдореВрд░реНрдЦ рд╕реЗ рдРрд╕реА рд╕реБрд░рдХреНрд╖рд╛ рд╣реИ, рдЬреЛ 100% рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред - рдЬрдм рдЖрдк рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЬрд╛рдБрдЪрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдирд╛рдо
__dyn_attrs__
рд╕реВрдЪреА рдореЗрдВ рд╣реИред рдЕрдиреНрдпрдерд╛, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред - рд╡рд░реНрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ
PyType_Modified(type)
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдХреИрд╢ рд╕рд╛рдлрд╝ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
Google рдХреЛрдб рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб
рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз
рд╣реИ ред
(рдореИрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕рдВрд▓рдЧреНрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реВрдВ, рдЪреВрдВрдХрд┐ рд╕рдм рдХреБрдЫ рдШреБрдЯрдиреЗ рдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрдиреЗ рдУрдПрд╕ рдореЗрдВ * .c рдлрд╝рд╛рдЗрд▓ рдХреИрд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ)ред
рд▓рд╛рдн?
рдЕрдм рдЖрдк рдпреЗ рдЪрдорддреНрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
>>> import typehack #god mode on
>>> def custom_len(text):
... return len(txt)
...
>>> list.size = custom_len # "size"
>>> ['Tinker', 'Tailor', 'Solder', 'Spy'].size()
4
>>> str.len = property(custom_len) # "len"
>>> "Hello".len
5
рдирд┐рд╖реНрдХрд░реНрд╖
рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдПрдХ рдРрд╕реА рдЧрддрд┐рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЗрд╕рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдордХреНрдЦреА рдкрд░ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдкрд╛рдпрдерди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рдЖрдкрдХреЛ рджреБрднрд╛рд╖рд┐рдпрд╛ рдХрд╛ рдЕрдкрдирд╛ рд╕рдВрд╕реНрдХрд░рдг рдмрдирд╛рдП рдмрд┐рдирд╛ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЫреЛрдЯреЗ рдкреНрд▓рдЧ-рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдЦреБрд▓реЗ рдХрд┐рдореЛрдиреЛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╣рдорд╛рд░реЗ рд╣рд╛рде рдореЗрдВ рд╣реИред
рдкрд╛рдЗрдерди рдЬрд╛рджреВ рд╕реАрдЦрдиреЗ рдХрд╛ рд╕реМрднрд╛рдЧреНрдпрдкреБрдирд╢реНрдЪ рдореИрдВрдиреЗ рдХрдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрд░реАрдХреНрд╖рдг рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╣реИрдХ рд╣реИ, рдкреНрд░реВрдл рдСрдл рдХреЙрдиреНрд╕реЗрдкреНрдЯред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред рд╕рд╛рде рд╣реА, рдкрд╛рдпрдерди 3 рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдирд╛ рдЧрдВрднреАрд░ рдЬрдЯрд┐рд▓рддрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: рдЙрдирдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рд╕рдорд╛рди рд╣реИред