рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░!
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд▓реЗрдЦ рд╣реИ рдЬреЛ рдХрд┐ Ostrovok.ru рдореЗрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдпрд╣ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреНрдпреЛрдВ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pyContracts рд╕реЗ рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВ рд╣рдо рдЯрд╛рдЗрдкрдЧрд╛рд░реНрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдо рдХрд┐рд╕ рдЪреАрдЬ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рдФрд░ рдЖрдЬ рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдпрд╣ рд╕рдВрдХреНрд░рдордг рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИред

PyContracts рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдЖрдо рддреМрд░ рдкрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:
from contracts import new_contract import datetime @new_contract def User (x): from models import User return isinstance(x, User) @new_contract def dt_datetime (x): return isinstance(x, datetime.datetime) @contract def func(user_list, amount, dt=None): """ :type user_list: list(User) :type amount: int|float :type dt: dt_datetime|None :rtype: bool """ тАж
рдпрд╣ рдПрдХ рдЕрдореВрд░реНрдд рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд╛ рдирд╣реАрдВ рдорд┐рд▓реА рдЬреЛ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рд╕рд╛рд░реНрдердХ рд╣реИред рдЖрдорддреМрд░ рдкрд░, pyContracts рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдПрдБ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдХреЛрдИ рдЕрдиреНрдп рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдпрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рд╣реИ, рдФрд░ рдпрд╣ рд╕реАрдзреЗ рдЖрдпрд╛рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рдЯрд╛рдЗрдкрдЧрд╛рд░реНрдб рдХреЗ рд╕рд╛рде рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рд╣реИ:
from typechecked import typechecked from typing import List, Optional, Union from models import User import datetime @typechecked def func (user_list: List[User], amount: Union[int, float], dt: Optional[datetime.datetime]=None) -> bool: ...
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдп рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдвреЗрд░ рдореЗрдВ рдвреЗрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЪрд╛рдБрдж рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЙрдиреНрд╣реЗрдВ рдЯрд╛рдЗрдкрдХрд╛рд╕реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pyContracts рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ (рдореИрдВрдиреЗ рдХреЛрд╢рд┐рд╢ рдХреА!)ред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдПрдХ рдХреИрд╢ рдирдП рдЕрдиреБрдмрдВрдзреЛрдВ рдХрд╛ рдЖрдпрд╛рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рди рддреЛ рдХреЛрдИ рдФрд░ рди рд╣реА рджреВрд╕рд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдиреЗ рдХрд╛ рджрд╛рд╡рд╛ рдХрд░рддреА рд╣реИред рд╣рдордиреЗ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рд░рдЦрд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдЕрдХреНрд╕рд░ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЛрдВ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛, рдЕрдЧрд░ рд╡реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕реЗ рд╣рд╛рде рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рдЬрд▓реНрджреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдирдЪрд┐рддреНрд░рдг рдЕрдиреБрдмрдВрдз рдФрд░ рдЖрдпрд╛рдд рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ 90% рдорд╛рди рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИ, рд╢реЗрд╖ 10% рдореИрдкрд┐рдВрдЧ рдХреНрд░рд╛рдлреНрдЯрд┐рдВрдЧ рдореИрдкрд┐рдВрдЧ рд╣реИрдВред
рдореИрдкрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рддрд░реНрдХ:
рдЪрд░рдг 1. рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдУ, рдЙрдиреНрд╣реЗрдВ рдкрдврд╝реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП:
- рдпрджрд┐ рд╡рд┐рдХрд▓реНрдк "@new_contract" рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ,
- рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╣реИ, рддреЛ рдлрд╝рд╛рдЗрд▓ рдХреЛ "@new_contract" рд▓рд╛рдЗрди рд╕реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП:
- рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдЖрдпрд╛рдд рдХреЗ рд▓рд┐рдП рдкрд╛рд░реНрд╕,
- рд╕рдлрд▓ рд╣реЛрдиреЗ рдкрд░, рд╕рдлрд▓рддрд╛ рдХреА рдлрд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦреЗрдВ,
- рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рддреНрд░реБрдЯрд┐ рдлрд╝рд╛рдЗрд▓ рдкрд░ рд▓рд┐рдЦреЗрдВред
рдЪрд░рдг 2. рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рддреНрд░реБрдЯрд┐рдпреЛрдВ
рдЕрдм рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрди рд╕рднреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдирд╛рдо рд╣реИрдВ рдЬреЛ pyContracts рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ (рд╡реЗ new_contract рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ), рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдЖрдпрд╛рдд рд╣реИрдВ, рд╣рдо рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдореИрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП pyContracts рд╕реЗ рдЕрдиреБрд╡рд╛рдж рдХрд░ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП:
- рдпрд╣ рдПрдХ рдХрдорд╛рдВрдб рд╣реИ рдЬреЛ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдирд╛рдо рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИ (рдХрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ), рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
- рд╕рднреА рдореЙрдбреНрдпреВрд▓ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рдУ, рдЙрдиреНрд╣реЗрдВ рдкрдврд╝реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП:
- рдпрджрд┐ рдХреЛрдИ "@ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ" рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВ;
- рдпрджрд┐ рд╣рд╛рдВ, рддреЛ рдХреЛрдб рдХреЛ рдПрд╕реНрдЯреНрд░реЛ (рд╕рд╛рд░ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА) рдореЗрдВ рдмрджрд▓ рджреЗрдВ;
- рдЙрди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬреЗрдВ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдмрдВрдз рд╕рдЬреНрдЬрд╛рдХрд╛рд░ рдХреЗ рдЕрдзреАрди рд╣реИрдВ:
- рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧ, рдкрд╛рд░реНрд╕, рддрдм рд╣рдЯрд╛рдПрдВ,
- рдкреНрд░рдкрддреНрд░ {arg_name: arg_type} рдХрд╛ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдмрдирд╛рдПрдВ, рдлрд╝рдВрдХреНрд╢рди рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ,
- рдирдпрд╛ рдЖрдпрд╛рдд рдпрд╛рдж рд░рдЦреЗрдВ,
- рдПрд╕реНрдЯрдирдкрд░реНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдкреЗрдбрд╝ рд▓рд┐рдЦреЗрдВ;
- рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдирдП рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ;
- рд▓рд╛рдЗрдиреЛрдВ рдХреЛ "@ рдХреЙрдиреНрдЯреНрд░реЗрдХреНрдЯ" рдХреЗ рд╕рд╛рде "@typechecked" рд╕реЗ рдмрджрд▓реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрд╕реНрдЯреНрд░реЛ рд╕реЗ рдЖрд╕рд╛рди рд╣реИред
рдкреНрд░рд╢реНрди рд╣рд▓ рдХрд░реЗрдВ "рдХреНрдпрд╛ рдпрд╣ рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?" рдореЗрд░рд╛ рд╢реБрд░реВ рд╕реЗ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рдерд╛: рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рд╣рдо рдЖрдЗрд╕реЛрд░реНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд░рди рдХреЗ рд╕рд╛рде рд╕рд╛рдордирд╛ рдХрд░реЗрдВрдЧреЗред
рд▓реЗрдХрд┐рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рд╕рд╡рд╛рд▓ рдЙрдареЗ рдЬреЛ рдЕрднреА рднреА рд╣рд▓ рд╣реЛрдирд╛ рдерд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ 1) ast рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рди рдирд╣реАрдВ рд╣реИ, 2) astunparse рд╣рдорд╕реЗ рдЬреНрдпрд╛рджрд╛ рд╕рд░реНрд╡рд╢рдХреНрддрд┐рдорд╛рди рд╣реИ рдЬрд┐рддрдирд╛ рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реБрдЖ рдерд╛:
- рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡реГрдХреНрд╖ рдореЗрдВ рд╕рдВрдХреНрд░рдордг рдХреЗ рдХреНрд╖рдг рдореЗрдВ, рдХреЛрдб рд╕реЗ рд╕рднреА рдПрдХрд▓-рдкрдВрдХреНрддрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ;
- рдЦрд╛рд▓реА рд░реЗрдЦрд╛рдПрдВ рднреА рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИрдВ;
- ast рд╡рд░реНрдЧ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рддрд░реАрдХреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╣рдореЗрдВ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рдерд╛;
- рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬрдм рдПрдХ рдкреЗрдбрд╝ рд╕реЗ рдПрдХ рдХреЛрдб рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯреНрд░рд┐рдкрд▓ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдПрдХрд▓-рдЙрджреНрдзрд░рдг рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ рдПрдХ рдкрдВрдХреНрддрд┐ рдкрд░ рдХрдмреНрдЬрд╛ рдХрд░ рд▓реЗрддреА рд╣реИрдВ, рдФрд░ рдирдИ рдкрдВрдХреНрддрд┐ рд╡рд┐рд░рд╛рдо рдХреЛ \ n рджреНрд╡рд╛рд░рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
- рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрд╖реНрдардХ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрджрд┐ рдП рдФрд░ рдмреА рдФрд░ рд╕реА рдпрд╛ рдбреА рдмрди рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ (рдП рдФрд░ рдмреА рдФрд░ рд╕реА) рдпрд╛ рдбреА)ред
Ast рдФрд░ astunparse рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдХреЛрдб рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдкрдардиреАрдпрддрд╛ рдХрдо рд╣реИред
рдЙрдкрд░реЛрдХреНрдд рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рджреЛрд╖ рдЧрд╛рдпрдм рдПрдХрд▓-рд▓рд╛рдЗрди рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╣реИрдВ (рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╣рдо рдХреБрдЫ рднреА рдирд╣реАрдВ рдЦреЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рд▓рд╛рдн - рдХреЛрд╖реНрдардХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП)ред Ast, astunparse, рдФрд░ tokenize рдкрд░ рдЖрдзрд╛рд░рд┐рдд рднрдпрд╛рд╡рд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХрд░рддрд╛ рд╣реИред
рдЕрдм рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЗрдВред рджреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рдереЗ:
- рдЯреЛрдХрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрдЬрдЧрд░ рдХреЗ "рднрд╛рд╖рдг рднрд╛рдЧ" рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрдм рд╡рд╣ рдЯрд┐рдкреНрдкрдгреА рдкреНрд░рдХрд╛рд░ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рддреЛ рднрдпрд╛рд╡рд╣рддрд╛ рдЗрд╕рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддреА рд╣реИред рд▓реЗрдХрд┐рди рдЯреЛрдХрди рдореЗрдВ рдиреНрдпреВрд▓рд╛рдЗрди рдФрд░ рдПрдирдПрд▓ рдЬреИрд╕реЗ рдЯреЛрдХрди рднреА рд╣реИрдВред рддреЛ, рдЖрдкрдХреЛ рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рдЯреЛрдХрди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдЧрд╣, рднрдпрд╛рд╡рд╣ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдХреИрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреА рд╣реИрдВ рдФрд░ рдХреЙрдкреА рдХрд░рддреА рд╣реИрдВред
- рдЕрдиреНрдпрд╛ рдХреЛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, 2 рдорд╣реАрдиреЗ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдиреБрднрд╡ - рдЪреВрдБрдХрд┐ рднрдпрд╛рд╡рд╣ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдкрд╣рд▓реЗ рд╕рднреА рдЦрд╛рд▓реА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВ, рдлрд┐рд░ рднрдпрд╛рд╡рд╣рддрд╛ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдПрдХ рдЦрд╛рд▓реА рд▓рд╛рдЗрди рд╕реЗ рдмрджрд▓ рджреЗрддреЗ рд╣реИрдВред
- рдпреВрдЬреАрди рдХреЗ рд╕рд╛рде рдЖрдпрд╛, 8 рд╡рд░реНрд╖реЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдЕрдиреБрднрд╡
рдореИрдВ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЯреНрд░рд┐рдкрд▓ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдХрдо рдХрд╣реВрдВрдЧрд╛, рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрд╖реНрдардХ рдХреЗ рд╕рд╛рде рдбрд╛рд▓рдирд╛ рдХрд╛рдлреА рдЖрд╕рд╛рди рдерд╛, рдЦрд╛рд╕рдХрд░ рдЬрдм рд╕реЗ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдСрдЯреЛ-рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рджреНрд╡рд╛рд░рд╛ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рднрдпрд╛рд╡рд╣рддрд╛ рдореЗрдВ рд╣рдо рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ: рдкрд╛рд░реНрд╕ рдФрд░ рдЕрд╡рд╛рдВрдЫрд┐рдд, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИрдВ - рдкрд╛рд░реНрд╕ рдореЗрдВ рдЕрдЬреАрдм рдЖрдВрддрд░рд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдХреБрдЫ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЯрд╛рдЗрдк рдкреНрд░рдХрд╛рд░ рд╣реЛ (рдРрд╕рд╛ рдкреНрд░рдХрд╛рд░) рдпрджрд┐ рдЖрдк рдЯрд╛рдЗрдк рдХрд░рддреЗ рд╣реИрдВ (any_other_type))ред
рдореИрдВрдиреЗ рдирд┐рд░реНрдгрдп рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдЫрджреНрдо рд╕реЗ рдирд╣реАрдВ рдирд┐рдкрдЯреВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рдо рдХрд╛ рддрд░реНрдХ рднреНрд░рд╛рдордХ рд╣реИ, рдФрд░ рдЕрдкрд╡рд╛рдж рджреБрд░реНрд▓рдн рд╣реИрдВ - рдЧреИрд░-рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХрддрд╛ рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рдпрд╣рд╛рдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдФрд░ рдХрд╛рдлреА рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЕрдирдкреЗрдХреНрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди Unparser рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреЗрдбрд╝ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд┐рдЦрддрд╛ рд╣реИред рд╣реЛрд░реНрд╕реНрдЯ.рдЙрдиреНрдирд░ рдХреЛ рдХрдИ рдЕрдиреНрдп рдЕрдирдкрд░реНрд╕рд░реНрд╕ рд╕реЗ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╕рдмрд╕реЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ astunparse.Unparser рд╣реИред рд╕рднреА рд╡рдВрд╢рдЬ рд╡рд░реНрдЧ рдмрд╕ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд╛рд░реНрдп рдХрд╛ рддрд░реНрдХ рд╕рдорд╛рди рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП astunparse.Unparser рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЗрд╕рдХреА рдкрд╛рдБрдЪ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВ:
- рд▓рд┐рдЦрдирд╛ - рдмрд╕ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдЦрддрд╛ рд╣реИред
- рднрд░ - рдЗрдВрдбреЗрдВрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд░рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдЗрдВрдбреЗрдВрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдПрдХ рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ)ред
- рдкреНрд░рд╡реЗрд╢ - рдЗрдВрдбреЗрдВрдЯ рдмрдврд╝рд╛рддрд╛ рд╣реИред
- рдЫреБрдЯреНрдЯреА - рдЗрдВрдбреЗрдВрдЯ рдХрдо рдХрд░рддрд╛ рд╣реИред
- рдкреНрд░реЗрд╖рдг - рдкреЗрдбрд╝ рдХреЗ рдиреЛрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЯреА рдХрд╣рддреЗ рд╣реИрдВ), рдиреЛрдб рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдбрд░рд╕реНрдХреЛрд░ (рдпрд╛рдиреА _T) рдХреЗ рд╕рд╛рдеред рдпрд╣ рдПрдХ рдореЗрдЯрд╛ рд╡рд┐рдзрд┐ рд╣реИред
рдЕрдиреНрдп рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдлреЙрд░реНрдо _T рдХреА рд╡рд┐рдзрд┐рдпрд╛рдВ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, _Module рдпрд╛ _Strред рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдореЗрдВ, рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: 1) рд╕рдмрдЯреНрд░реА рдиреЛрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдкреБрдирд░рд╛рд╡рд░реНрддреА рднреЗрдЬ рджреЗрдВ, рдпрд╛ 2) рдиреЛрдб рдХреА рд╕рд╛рдордЧреНрд░реА рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдпрд╛ рд╡рд░реНрдг рдФрд░ рдХреАрд╡рд░реНрдб рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рд╡реИрдз рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рд╣реЛред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рдХрд╛рд░ arg рдХреЗ рдиреЛрдб рдореЗрдВ рдЖрдП, рдЬрд┐рд╕рдореЗрдВ ast рддрд░реНрдХ рдирд╛рдо рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдиреЛрдб рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдкреНрд░реЗрд╖рдг _arg рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛, рдЬреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдирд╛рдо рдХреЛ рд▓рд┐рдЦ рджреЗрдЧрд╛, рдлрд┐рд░ рдХреЙрд▓рди рд▓рд┐рдЦреЗрдВ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдиреЛрдб рдХреЗ рд▓рд┐рдП рд░рдирдЪреЗрдХ рдХрд░реЗрдВ, рдЬрд╣рд╛рдВ рдПрдиреЛрдЯреЗрд╢рди рд╕рдмрдЯреНрд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдбрд┐рд╕реНрдкреИрдЪ рдФрд░ рд░рд╛рдЗрдЯ рдЕрднреА рднреА рдЗрд╕ рд╕рдмрдЯреНрд░реА рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рдХрд╛рд░ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рдХреА рд╣рдорд╛рд░реА рд╕рдорд╕реНрдпрд╛ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯреЗрдВред рдЕрдм рдЬрдм рдЖрдк рд╕рдордЭ рдЧрдП рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХрд╛ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИред рдЪрд▓реЛ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдмрдирд╛рдПрдБ:
class NewType(object): def __init__ (self, t): self.s = ts
рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рди рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рд╕реЗ: рд╣рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рддрд░реНрдХреЛрдВ рдХреЛ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдбреЙрдХрд┐рдВрдЧ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЗ рддрд░реНрдХ рдорд┐рд▓рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рддрд░реНрдХ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдЙрди рдкреНрд░рдХрд╛рд░реЛрдВ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ рдЬреЛ рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдиреНрдпреВ рдЯрд╛рдЗрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЬреЛ рдХреЗрд╡рд▓ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдирд╛рдо рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, horast.Unparser рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВ - рдЕрдкрдиреЗ UnparserWithType рдХреЛ рд▓рд┐рдЦреЗрдВ, рдЬреЛ рдХрд┐ horast.Unparser рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдирдП рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдЬреЛрдбрд╝реЗрдВред
class UnparserWithType(horast.Unparser): def _NewType (self, t): self.write(ts)
рдпрд╣ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреА рднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреА рд╣реИред рдЪрд░реЛрдВ рдХреЗ рдирд╛рдо рдЕрд╕реНрдЯ рдХреА рд╢реИрд▓реА рдореЗрдВ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рдПрдХ рдЕрдХреНрд╖рд░ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐ рдореИрдВ рдирд╛рдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдЯреА рдХрдо рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдПрд╕ред рд╡реИрд╕реЗ, рдиреНрдпреВрдЯрд╛рдЗрдк рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ рдХрд┐ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП, рддреЛ рд╣рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдЙрджреНрдзрд░рдг рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред
рдФрд░ рдЕрдм рдЬрд╛рджреВ рдмрдВрджрд░ рдкреИрдЪ: рд╣рдорд╛рд░реЗ UnparserWithType рдХреЗ рд╕рд╛рде horast.Unparser рдХреЛ рдмрджрд▓реЗрдВред
рдЕрдм рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рд╣реИ, рдЗрд╕рдореЗрдВ рдХреБрдЫ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддрд░реНрдХ рд╣реИрдВ, рддрд░реНрдХ рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рд╣реИрдВ, рдПрдХ рд╕реБрдИ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИ, рдФрд░ рдХреЛрд╢реЗрдЪреЗрд╡ рдХреА рдореГрддреНрдпреБ рдЗрд╕рдореЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИред рдкрд╣рд▓реЗ, рдХреЛрдИ рдПрдиреЛрдЯреЗрд╢рди рдиреЛрдбреНрд╕ рдирд╣реАрдВ рдереЗ, рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдпрд╛, рдФрд░ рдРрд╕рд╛ рдХреЛрдИ рдиреЛрдб рдиреНрдпреВрдЯрд╛рдЗрдк рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдкреЗрдбрд╝ рдХреЗ рд▓рд┐рдП рдЕрд╡рд╛рдВрдЫрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдиреЛрдб рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкреНрд░реЗрд╖рдг рдХрд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдЙрд╕ рдиреЛрдб рдХреЛ рд╡рд░реНрдЧреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕реЗ рд╣реА рдкреНрд░реЗрд╖рдг рд╕рдорд╛рд░реЛрд╣ рддрд░реНрдХ рдХрд╛ рдиреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рддрд░реНрдХ рдХрд╛ рдирд╛рдо рд▓рд┐рдЦрддрд╛ рд╣реИ, рдлрд┐рд░ рдпрд╣ рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдПрдиреЛрдЯреЗрд╢рди рд╣реИ (рдпрд╣ рдХреЛрдИ рдирд╣реАрдВ рд╣реБрдЖ рдХрд░рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╣рд╛рдВ рдиреНрдпреВрдЯрд╛рдЗрдк рдбрд╛рд▓рддреЗ рд╣реИрдВ), рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдХреЙрд▓рди рд▓рд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рдг рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ _NewType рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИ - рдпрд╣ рдЯрд╛рдЗрдк рдирд╛рдо рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ рд▓рд┐рдЦрд┐рдд рддрд░реНрдХ рдорд┐рд▓рддрд╛ рд╣реИ: рдкреНрд░рдХрд╛рд░ред
рджрд░рдЕрд╕рд▓, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╛рдиреВрдиреА рдирд╣реАрдВ рд╣реИред рд╕рдВрдХрд▓рдХ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рд╣рдордиреЗ рдХреБрдЫ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рде рддрд░реНрдХреЛрдВ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд▓рд┐рдЦрд╛ рд╣реИ рдЬреЛ рдХрд╣реАрдВ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЧрд▓рдд рдХреЛрдб рдорд┐рд▓рддрд╛ рд╣реИ: рд╣рдореЗрдВ рдЖрдпрд╛рдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдмрд╕ рд╕рд╣реА рдкреНрд░рд╛рд░реВрдк рдХреА рдПрдХ рдкрдВрдХреНрддрд┐ рдмрдирд╛рддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕реЗ рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рдкреЗрдбрд╝ рдореЗрдВ рдиреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдЖрдпрд╛рдд рдЬреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЖрдпрд╛рдд рдФрд░ рдЖрдпрд╛рдд рд╕реЗ рдиреЛрдб рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред
рдЯреНрд░рд┐рдкрд▓ рдХреЛрдЯреЗрд╢рди рдорд╛рд░реНрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдирдП рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдХрдард┐рди рдирд╣реАрдВ рд╣реИред рд╣рдо StrType рдХреНрд▓рд╛рд╕ рдФрд░ _StrType рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВрдЧреЗред рд╡рд┐рдзрд┐ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ _NewType рд╡рд┐рдзрд┐ рд╕реЗ рдЕрд▓рдЧ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд░реНрдЧ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдмрджрд▓ рдЧрдИ рд╣реИ: рд╣рдо рди рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВрдЧреЗ, рдмрд▓реНрдХрд┐ рдЯреИрдм рд╕реНрддрд░ рднреА рдЬрд┐рд╕ рдкрд░ рдЗрд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдпрджрд┐ рдпрд╣ рд░реЗрдЦрд╛ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдПрдХ, рдпрджрд┐ рдПрдХ рд╡рд┐рдзрд┐ рдореЗрдВ, рддреЛ рджреЛ, рдФрд░ рдРрд╕реЗ рдХреЛрдИ рдорд╛рдорд▓реЗ рдирд╣реАрдВ рд╣реИрдВ рдЬрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд┐рд╕реА рдЕрдиреНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВред
class StrType(object): def __init__ (self, s, indent): self.s = s self.indent = indent def __repr__ (self): return '"""\n' + self.s + '\n' + ' ' * 4 * self.indent + '"""\n'
рд░реАрдкреНрд░ рдореЗрдВ рд╣рдо рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд░реЗрдЦрд╛ рдХреИрд╕реА рджрд┐рдЦрдиреА рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╕реЗ рджреВрд░ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХреЛрдИ astunparse.fill рдФрд░ astunparse.Unparser.indent рдХреЗ рд╕рд╛рде рдкреНрд░рдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдпрд╛ рдерд╛ред
рдЗрд╕рд╕реЗ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХрд╛ рдЕрдВрдд рд╣реБрдЖред рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЪрдХреНрд░реАрдп рдЖрдпрд╛рдд рдХреА рд╕рдорд╕реНрдпрд╛ рдХрднреА-рдХрднреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореБрджреНрджрд╛ рд╣реИред рдореБрдЭреЗ рддреИрдпрд╛рд░ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛, рдФрд░ рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреА рдПрдХ рдЧрдВрднреАрд░ рдЬрдЯрд┐рд▓рддрд╛ рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред рд╕рдВрднрд╡рддрдГ, рдЪрдХрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП ast рдХреА рдорджрдж рд╕реЗ рдЪрдХреНрд░реАрдп рдЖрдпрд╛рдд рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдФрд░ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдкрд░ рдЕрд▓рдЧ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдРрд╕реА рдШрдЯрдирд╛рдУрдВ рдХреА рдирдЧрдгреНрдп рд╕рдВрдЦреНрдпрд╛ рдиреЗ рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
рдПрдХ рдФрд░ рдХрдард┐рдирд╛рдИ рдЬрд┐рд╕рдХрд╛ рдореБрдЭреЗ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛, рдПрд╕реНрдЯреНрд░реЛ рдЖрдпрд╛рдд рд╕реЗ рдПрд╕реНрдЯреНрд░реЛ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреА рдХрдореА рдереА рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рд╛рд╡рдзрд╛рди рдкрд╛рдардХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдмрдВрджрд░ рдкреИрдЪ рд╕рднреА рдмреАрдорд╛рд░рд┐рдпреЛрдВ рдХрд╛ рдЗрд▓рд╛рдЬ рд╣реИред рдпрд╣ рдЙрд╕рдХреЗ рд▓рд┐рдП рдЙрд╕рдХрд╛ рд╣реЛрдорд╡рд░реНрдХ рд╣реЛрдиреЗ рджреЗрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛: рдореИрдкрд┐рдВрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдмрд╕ рдРрд╕реЗ рдЖрдпрд╛рдд рдЬреЛрдбрд╝реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдирд┐рд░реНрдорд╛рдг рдЖрдорддреМрд░ рдкрд░ рдирд╛рдо рд╕рдВрдШрд░реНрд╖ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВред
рдорд┐рд▓реА рдЦрд╛рдорд┐рдпреЛрдВ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╣реА рдХрд░рддреА рд╣реИ рдЬреЛ рд╡рд╣ рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рд░рдЦрддреА рдереАред рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реИ:
- рдЬрд┐рд╕ рд╕рдордп рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рд╣реИ рд╡рд╣ 10 рд╕реЗ 3 рд╕реЗрдХрдВрдб рддрдХ рдХрдо рд╣реЛ рдЧрдИ рд╣реИ;
- рдирдИ_рдХрдВрдЯреНрд░реЗрдХреНрдЯ рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдХрд╛рд░рдг рдлрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдХрдореА рдЖрдИ рд╣реИред рдлрд╛рдЗрд▓реЗрдВ рдЦреБрдж рд╣реА рдХрдо рд╣реЛ рдЧрдИ рдереАрдВ: рдореИрдВрдиреЗ рдорд╛рдк рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдФрд╕рддрди рдЬреАрдПрдЯреА рдХреБрд▓ рдПрди рд▓рд╛рдЗрдиреЛрдВ рдФрд░ 2 рдПрди рд╣рдЯрд╛рдП рдЧрдП;
- рд╕реНрдорд╛рд░реНрдЯ рдЖрдИрдбреАрдИ рдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдВрдХреЗрдд рдмрдирд╛рдиреЗ рд╢реБрд░реВ рдХрд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдЕрдм рд╡реЗ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдИрдорд╛рдирджрд╛рд░ рдЖрдпрд╛рдд;
- рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реБрдЖ рд╣реИ;
- рдХрд╣реАрдВ-рдХрд╣реАрдВ рдХреЛрд╖реНрдардХ рджрд┐рдЦрд╛рдИ рджрд┐рдПред
рдзрдиреНрдпрд╡рд╛рдж!
рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:
- Ast
- Horast
- рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрд╕реНрдЯреНрд░реЛ рдиреЛрдбреНрд╕ рдФрд░ рдЙрдирдореЗрдВ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рд╣реИ
- рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рд╡рд╛рдХреНрдп рд░рдЪрдирд╛ рдкреЗрдбрд╝ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
- Isort