рд╢реБрдн рджреЛрдкрд╣рд░, рджреЛрд╕реНрддреЛрдВред рдФрд░ рд╣рдо рдирдП рдкрд╛рдареНрдпрдХреНрд░рдореЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреА рддреАрд╡реНрд░рддрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЕрдм рдЕрдкреНрд░реИрд▓ рдХреА рджреЗрд░ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ
"рд╡реЗрдм-рдбреЗрд╡рд▓рдкрд░ рдЗрди рдкрд╛рдпрдерди" рдкрд╛рдареНрдпрдХреНрд░рдо
рдореЗрдВ рдХрдХреНрд╖рд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреЗ рд╣реБрдП рдЦреБрд╢ рд╣реИрдВред рдЗрд╕ рд╕рдВрдмрдВрдз рдореЗрдВ, рд╣рдо рдкрд░рдВрдкрд░рд╛рдЧрдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЕрдиреБрд╡рд╛рдж рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рдкрд╛рдпрдерди рдХреЛ рдПрдХ рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдбреАрдПрд╕рдПрд▓ рдЬреИрд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд┐рдЦрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬреЛ рд╕реНрдЯреИрдЯрд┐рдХ рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдЯреВрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж,
mypy рдХреЗ рдирд╡реАрдирддрдо рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд╡рд╛рдЪрд╛рд░реЛрдВ, рдЬреИрд╕реЗ рдХрд┐
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдФрд░
рд╢рд╛рдмреНрджрд┐рдХ рдкреНрд░рдХрд╛рд░ , рд╕рд╛рде рд╣реА рдореЗрдЯрд╛рдХреНрд▓рд╕ рдФрд░ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдмреБрдирд┐рдпрд╛рджреА рд╕рдорд░реНрдерди, рд╣рдо рдЕрдХреНрд╕рд░ рд╕рдЯреАрдХ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдФрд░ рдЕрдиреНрдп рдирдХрд╛рд░рд╛рддреНрдордХ рдХрд╛рд░рдХреЛрдВ рд╕реЗ рдмрдЪрдирд╛ рдЕрднреА рднреА рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░ рдкреНрд░рдгрд╛рд▓реА рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП,
рдореИрдкреА рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдкрд╛рдЗрдерди рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ рдЬреЛ рдкреНрд▓рдЧрдЗрди рд╣реБрдХ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╕рдордп
рдореИрдкреА рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд▓реМрдЯреЗ рд╣реБрдП рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреЛ рдХрд┐ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдпрдерд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдпрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрд┐рдВрдмрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рд╡рд░реНрдЧ рд╡рд┐рдзрд┐рдпрд╛рдВ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдкреВрд░реА рд╕реВрдЪреА рджреЗрдЦреЗрдВ,
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреЗрдЦреЗрдВ ред
рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕Mypy рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХрдХреНрд╖рд╛рдУрдВ, рд╕рд╛рде рд╣реА
ctypes
,
contextlib
рдФрд░
dataclasses
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕рд╛рде рдЖрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ
рдПрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдпрд╣ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдкрд╣рд▓рд╛ рдерд░реНрдб-рдкрд╛рд░реНрдЯреА рдкреНрд▓рдЧрдЗрди рд╣реИ рдЬреЛ
рдорд╛рдпрдкреА рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпреЗ рдкреНрд▓рдЧрдЗрдиреНрд╕
mypy рдХреЛ рдЗрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдФрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ
рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
from dataclasses import dataclass from typing import Generic, TypeVar @dataclass class TaggedVector(Generic[T]): data: List[T] tag: str position = TaggedVector([0, 0, 0], 'origin')
рдКрдкрд░,
get_class_decorator_hook()
рдХреЛ рддрдм рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХрдХреНрд╖рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдмреЙрдбреА рдореЗрдВ
__init__()
рд╕рд╣рд┐рдд рдСрдЯреЛ-рдЬрдирд░реЗрдЯреЗрдб рддрд░реАрдХреЗ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
Mypy рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ
TaggedVector[int]
position
рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ
TaggedVector[int]
рд╕рд╣реА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЙрджрд╛рд╣рд░рдг рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕рд╛рдорд╛рдиреНрдп рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдХреЛрдб рд╣реИ:
from contextlib import contextmanager @contextmanager def timer(title: str) -> Iterator[float]: ... with timer(9000) as tm: ...
рдпрд╣рд╛рдБ
get_function_hook()
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рд╕рдЬрд╛рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдХреЙрд▓ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдЕрдм
mypy рддреНрд░реБрдЯрд┐ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИ:
timer()
рд▓рд┐рдП рддрд░реНрдХ
timer()
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд▓рдЧрдЗрдиреНрд╕ рдФрд░ рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдПрдХ рд╕рдВрдпреЛрдЬрдирдбрд╛рдпрдиреЗрдорд┐рдХ рдкрд╛рдпрдерди рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрдбрд╝реЗ рдПрдкреАрдЖрдИ рд╣реЛрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдЕрдХреНрд╕рд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЪрд▓рддрд╛ рд╣реИред
Mypy рдХреЛ рдЗрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд▓рд┐рдП
рд╕реНрдЯрдм рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рдХреЗрд╡рд▓ рдпрджрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдЗрддрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рд╣реИ)ред
рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдмрдбрд╝реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рд╡рд┐рддрд░рд┐рдд рдХрд░рдирд╛ рдПрдХ рдЖрдо рдмрд╛рдд рдирд╣реАрдВ рд╣реИ:
- рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рд░рд┐рд▓реАрдЬ рдЪрдХреНрд░ ( mypy рдХреЗ рд╕рд╛рде рднреЗрдЬ рджрд┐рдпрд╛ рдЧрдпрд╛) рд╣реИред
- рдЕрдкреВрд░реНрдг рд╕реНрдЯрдмреНрд╕ рд╕реЗ рдЭреВрдареА рдХреЙрд▓ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдмрдЪрдирд╛ рдмреЗрд╣рдж рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
- рд╡рд┐рднрд┐рдиреНрди рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рд╕реНрдЯрдмреНрд╕ рдХреЛ рди рдорд┐рд▓рд╛рдПрдВ ред
PEP 561 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рд╕реНрдЯрдм рдкреИрдХреЗрдЬ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХрд░рддреЗ рд╣реИрдВ:
- рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реНрдЯрдм рдкреИрдХреЗрдЬ рдХреЛ рдЬрд┐рддрдиреА рдмрд╛рд░ рдЪрд╛рд╣реЗрдВ рдЙрддрдиреА рдмрд╛рд░ рдЬрд╛рд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдЬрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЪреБрдирд╛ рд╣реИ, рд╡реЗ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рджреЗрдЦреЗрдВрдЧреЗред
- рдЖрдк рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрдЯрдм рдкреИрдХреЗрдЬреЛрдВ рдХреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
pip
рдЖрдкрдХреЛ рдПрдХ рд╡рд┐рддрд░рдг рдореЗрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд
рдЦрд╕реНрддрд╛рд╣рд╛рд▓ рдкреНрд▓рдЧ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╕реНрдЯрдмреНрд╕ рдХреЛ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
Mypy рдлреНрд░реЗрдорд╡рд░реНрдХ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рддрд░рдг рдореЗрдВ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдмреЗрд╣рдж рдЙрдкрдпреЛрдЧреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╕реНрдЯрдм рдореЗрдВ рдЧрд╛рдпрдм рдпрд╛ рдЧрд▓рдд рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЛ рднрд░рддреЗ рд╣реИрдВред
рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрдХреЗрдЬ рдХрд╛ рдирд╡реАрдирддрдо рдЙрджрд╛рд╣рд░рдг
SQLAlchemy рд╕реНрдЯрдмреНрд╕ рдФрд░ рдкреНрд▓рдЧрдЗрди рд╣реИ , рд╕рдВрд╕реНрдХрд░рдг 0.1 рдХреА рдкрд╣рд▓реА рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░рд┐рд▓реАрдЬ рдХреЗ рд╕рд╛рде, рдЬрд┐рд╕реЗ рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ PyPI рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдпрд╣ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╢реБрд░реБрдЖрддреА рдЕрд▓реНрдлрд╛ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реИ, рд╣рдо рдЯрд╛рдЗрдк рдЪреЗрдХрд┐рдВрдЧ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбреНрд░реЙрдкрдмреЙрдХреНрд╕ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд▓рдЧрдЗрди рдореВрд▓ ORM рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реИ:
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String)
рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ,
get_dynamic_class_hook()
рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди
get_dynamic_class_hook()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмреЗрд╕ рдПрдХ рдорд╛рдиреНрдп рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╣реИ, рднрд▓реЗ рд╣реА рд╡рд╣ рдРрд╕рд╛ рди рджрд┐рдЦрддрд╛ рд╣реЛред рддрдм
get_base_class_hook()
рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдХрдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдЕрдЧрд▓рд╛, рд╣рдо рдореЙрдбрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддреЗ рд╣реИрдВ:
user = User(id=42, name=42)
get_function_hook()
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП
mypy рдореЗрдВ рддреНрд░реБрдЯрд┐
рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреА рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рдмрдЬрд╛рдп
integer
рдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред
рд╕реНрдЯрдмреНрд╕
Column
рдХреЛ
рдЬреЗрдиреЗрд░рд┐рдХ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддрд╛рдХрд┐ рдореЙрдбрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдорд┐рд▓реЗрдВ:
id_col = User.id
рд╣рдо рдкреАрдЖрд░рдПрд╕ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯрдмреНрд╕ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкреНрд░рдХрд╛рд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдХреЛрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рдкреНрд░рдЧрддрд┐
рдпрд╣рд╛рдВ рдЯреНрд░реИрдХ рдХреА рдЬрд╛рддреА
рд╣реИ )ред
рдкреНрд▓рдЧ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдордиреЗ рдХреБрдЫ рдиреБрдХрд╕рд╛рди рдЦреЛрдЬреЗ рд╣реИрдВ:
- рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдореЗрдВ рдЭреВрдареА рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП
__getattr__()
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдЬрдм рд╕реНрдЯрдмреНрд╕ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ (рдпрд╣ рдореЙрдбреНрдпреВрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рдЧрд╛рдпрдм рд╣реЛрдиреЗ рдкрд░ mypy рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдк рдХрд┐рд╕реА рд╕рдмрдореЙрдбрд▓реНрд╕ рдХреЗ рдЧреБрдо рд╣реЛрдиреЗ рдкрд░ __init__.py
рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рднреА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред - рдХрд╕реНрдЯрдо рдПрдЯреНрд░рд┐рдмреНрдпреВрдЯ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░реНрд╕ рдЕрдХреНрд╕рд░ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддреЗ рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдХреЙрд▓рдо рдЙрджрд╛рд╣рд░рдг рдореЗрдВ)ред рд╡рд░реНрдгрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдареАрдХ рд╣реИ, рднрд▓реЗ рд╣реА рд░рдирдЯрд╛рдЗрдо рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдПрдХ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЗрдЯрд╛рдХреНрд▓рд╕ рд╕рд╣рд┐рддред
- рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╣рд┐рдЪрдХрд┐рдЪрд╛рд╣рдЯ рдХреЗ, рдлреНрд░реЗрдорд╡рд░реНрдХ рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рд╡реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдРрд╕реЗ рдирд╣реАрдВ рд╣реИрдВ, рдпрд╣ рддрдХрдиреАрдХ рдЖрдкрдХреЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдХреБрдЫ рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬрдмрдХрд┐ рд░рдирдЯрд╛рдЗрдо рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред (рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдлреНрд░реЗрдорд╡рд░реНрдХ рдзреАрд░реЗ-рдзреАрд░реЗ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓ рд╕рдорд░реНрдерди рдХреЛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛, рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
typing.Generic
рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдЧреЛрдВ рдХреЛ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ typing.Generic
ред typing.Generic
ред)
рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдореИрдкреА рдкреНрд▓рдЧрдЗрдиреНрд╕рд▓реЛрдХрдкреНрд░рд┐рдп рдкрд╛рдпрдерди рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд
SQLAlchemy рдкреНрд▓рдЧрдЗрди рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕реНрдЯрдмреНрд╕ рдХреЗ рд╕рд╛рде рдЕрдиреНрдп рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рдирдореВрдиреЗ рдкреИрдХреЗрдЬ рдФрд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдЦрд╕реНрддрд╛ рдкреНрд▓рдЧрдЗрди рдореЗрдВ
Django рдФрд░
Zope рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдЗрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдкрд░ рд╕рдХреНрд░рд┐рдп рдХрд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИред
рд╕реНрдЯрдм рдФрд░ рдкреНрд▓рдЧрдЗрди рдкреИрдХреЗрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛Mypy рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдкреИрдХреЗрдЬ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ / рдпрд╛ рд╡рд░реНрдЪреБрдЕрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рд╕реНрдЯрдм рдХрд░реЗрдВ рдЬрд╣рд╛рдВ
mypy рдкрд╣рд▓реЗ рд╕реЗ
рдЗрдВрд╕реНрдЯреЙрд▓ рд╣реИ :
$ pip install sqlalchemy-stubs
Mypy рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╕реНрдЯрдмреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдЧрд╛ред рд╕реНрдерд╛рдкрд┐рдд рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдиреНрд╣реЗрдВ рд╕реАрдзреЗ mypy.ini рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ (рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ):
[mypy] plugins = sqlmypy, mypy_django_plugin.main
Mypy рдкреНрд▓рдЧрдЗрдиреНрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдФрд░ рд╕реНрдЯрдмреНрд╕ рд▓рд┐рдЦрдирд╛
рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдЯрдмреНрд╕ рдФрд░ рдкреНрд▓рдЧ рдЗрди рдХрд╛ рдкреИрдХреЗрдЬ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд░реВрдк
рдореЗрдВ sqlalchemy-stubs рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рд╕реЗрдЯрдЕрдк-
setup.py
, рдбреЗрдЯрд╛-рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрд╡рд╕рдВрд░рдЪрдирд╛ рдкрд░реАрдХреНрд╖рдг, рдФрд░ рдкреНрд▓рдЧ-рдЗрди (рдкреНрд▓рдЧ рд╣реБрдХ) рдХреЗ рд▓рд┐рдП рд╣реБрдХ рдХреЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкреНрд▓рдЧ-рдЗрди рдХрдХреНрд╖рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд╣рдо
рд╕реНрдЯрдмрдЧреЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддреЗ рд╣реИрдВ
рддрд╛рдХрд┐ рд╡реЗ рдЙрди рд╕реНрдЯрдмреНрд╕ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗрдВ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдореИрдкреА рдХреЗ рд╕рд╛рде рдЖрддреЗ рд╣реИрдВред
Stubgen
рдиреЗ
mypy 0.670
рдореЗрдВ
mypy 0.670
рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк
mypy рдкреНрд▓рдЧрдЗрди
рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреЗрдЦреЗрдВред рдЖрдк рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд┐рдП рдЧрдП рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдиреЗрдЯ рднреА рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ
рдпрд╣рд╛рдБ рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВред
15 рдЕрдкреНрд░реИрд▓ рдкрд╛рдареНрдпрдХреНрд░рдо рдкрд░ рдПрдХ рдореБрдлреНрдд
рдЦреБрд▓рд╛ рд╡реЗрдмрд┐рдирд╛рд░ рд╣реЛрдЧрд╛, рдЬреЛ рдореЙрд╕реНрдХреЛ рдкрд╛рдпрдерди рд╕рдореБрджрд╛рдп рдХреЗ рдПрдХ рдЖрдпреЛрдЬрдХ -
рд╡реНрд▓рд╛рджрд┐рдореАрд░ рдлрд┐рд▓реЛрдиреЛрд╡ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЗрди рдЕрдк рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реЛрдЧрд╛ред рдФрд░ рдЕрдм рд╣рдо рдЕрдиреБрд╡рд╛рджрд┐рдд рд╕рд╛рдордЧреНрд░реА рдкрд░ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред