рдкрд╛рдпрдерди рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдкрд░рд┐рдЪрдп

рдкрд░рд┐рдЪрдп



рдореИрдЧреНрдбреЗрд▓реЗрдирд╛ рдЯреЛрдореНрдЬрд╝реЗрдХ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рддреНрд░рдг


рджреВрд╕рд░рд╛ рднрд╛рдЧ


рдкрд╛рдпрдерди рдЧрддрд┐рд╢реАрд▓ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдПрдХ рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рд╣рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп, рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рдо рдпрд╣ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдпрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдкреНрд░рддрд┐рдмрдВрдз рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдФрд░ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд╛рд▓рди рдХреЗ рд▓рд┐рдП, рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг рд╕реЗ рдЬреБрдбрд╝реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдЦреЛрдЬрдирд╛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


рдкрд╛рдпрдерди (3.6+) рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдбрд╛рдпрдирд╛рдорд┐рдХ рдбрдХ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд░рдЦрддреЗ рд╣реБрдП, рдпрд╣ рдЪрд░ рдкреНрд░рдХрд╛рд░реЛрдВ, рд╡рд░реНрдЧ рдХреНрд╖реЗрддреНрд░реЛрдВ, рддрд░реНрдХреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд░рд┐рдЯрд░реНрди рдорд╛рдиреЛрдВ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ:



рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЗрд╡рд▓ рдкрд╛рдпрдерди рджреБрднрд╛рд╖рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдкрдврд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдм рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдХреЛрдб рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред


рдореЗрд░рд╛ рдирд╛рдо рдПрдВрдбреНрд░реА рддрд┐рдЦреЛрдиреЛрд╡ рд╣реИ рдФрд░ рдореИрдВ рд▓рдореЛрдбрд╛ рдореЗрдВ рдмреИрдХрдПрдВрдб рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдореЗрдВ рд▓рдЧрд╛ рд╣реВрдВред


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ typing рдПрдиреЛрдЯреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред


рдПрдиреЛрдЯреЗрд╢рди рдЙрдкрдХрд░рдг


рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХрдИ рдкрд╛рдпрдерди рдЖрдИрдбреАрдИ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЧрд▓рдд рдХреЛрдб рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ рдпрд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕рдВрдХреЗрдд рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ Pycharm рдореЗрдВ рджрд┐рдЦрддрд╛ рд╣реИ:


рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐



рдЯрд┐рдкреНрд╕:



рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдХрдВрд╕реЛрд▓ рд▓рд┐рдВрдЯрд░ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдпрд╣рд╛рдБ pylint рдХрд╛ рдЙрддреНрдкрд╛рджрди рд╣реИ:


 $ pylint example.py ************* Module example example.py:7:6: E1101: Instance of 'int' has no 'startswith' member (no-member) 

рд▓реЗрдХрд┐рди рдЙрд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ mypy рдорд┐рд▓рд╛:


 $ mypy example.py example.py:7: error: "int" has no attribute "startswith" example.py:10: error: Unsupported operand types for // ("str" and "int") 

рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, mypy рдФрд░ pycharm рдПрдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдмрджрд▓рддреЗ рд╣реИрдВред рдЖрдЧреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдореИрдВ mypy рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред


рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдХреЛрдб рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рдЕрдкрд╡рд╛рдж рдХреЗ рдмрд┐рдирд╛ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдХрд╛рд░рдг рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ, рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдореВрд▓ рдмрд╛рддреЗрдВ


рдкрд╛рдпрдерди рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдпрд╛ рдбреЙрдХрд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕реАрдзреЗ рдХреЛрдб рдореЗрдВред рдПрдХ рддрд░рдл, рдпрд╣ рдиреАрдЪреЗ рдХреА рдУрд░ рд╕рдВрдЧрддрддрд╛ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ, рджреВрд╕рд░реА рдУрд░, рдЗрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ


рд╕рд░рд▓рддрдо рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдиреЛрдЯреЗрд╢рди рдореЗрдВ рд╕реАрдзреЗ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВред рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдкрд░ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдкрдиреЗ рд╡рдВрд╢рдЬреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдк рдХреЗрд╡рд▓ рдЙрдиреНрд╣реАрдВ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рд╣реИрдВред


рдкрд╣рдЪрд╛рди рдХреЗ рдмрд╛рдж рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдХреЗ рдмрд╛рдж рдЪрд░ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рдж, рдореВрд▓реНрдп рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП


 price: int = 5 title: str 

рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЪрд░ рдХреЗ рд╕рдорд╛рди рддрд░реАрдХреЗ рд╕реЗ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╡рд╛рдкрд╕реА рдорд╛рди рдХреЛ рддреАрд░ рдХреЗ рдмрд╛рдж -> рдФрд░ рдЕрдВрддрд┐рдо рдмреГрд╣рджрд╛рдиреНрддреНрд░ рд╕реЗ рдкрд╣рд▓реЗ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП


 def indent_right(s: str, width: int) -> str: return " " * (max(0, width - len(s))) + s 

рд╡рд░реНрдЧ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рд╡рд░реНрдЧ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ __init__ рдкрджреНрдзрддрд┐ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╡реЗ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ


 class Book: title: str author: str def __init__(self, title: str, author: str) -> None: self.title = title self.author = author b: Book = Book(title='Fahrenheit 451', author='Bradbury') 

рд╡реИрд╕реЗ, рдбреЗрдЯрд╛рд╕рд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рд╡рд░реНрдЧ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХрдХреНрд╖рд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреЗрдЯрд╛рдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ


рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░


рдпрджреНрдпрдкрд┐ рдЖрдк рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, typing рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдмрд╣реБрдд рд╕реА рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ рдЫрд┐рдкреА рд╣реБрдИ рд╣реИрдВред


рдРрдЪреНрдЫрд┐рдХ


рдпрджрд┐ рдЖрдк рдЪрд░ рдХреЛ int рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ None рдХреЛ рднреА рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ None , рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА:


Incompatible types in assignment (expression has type "None", variable has type "int")


рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ Optional рдПрдиреЛрдЯреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд░ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


 from typing import Optional amount: int amount = None # Incompatible types in assignment (expression has type "None", variable has type "int") price: Optional[int] price = None 

рдХреЛрдИ


рдХрднреА-рдХрднреА рдЖрдк рд╕рдВрднрд╡ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪрд░ рдХреЛ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдпрд╛ рдпрджрд┐ рдЖрдк рд╕реНрд╡рдпрдВ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдк Any рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред Mypy рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдкрд░ рд╢рдкрде рдирд╣реАрдВ рд▓реЗрдЧрд╛:


 unknown_item: Any = 1 print(unknown_item) print(unknown_item.startswith("hello")) print(unknown_item // 0) 

рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ рдХрд┐ object рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд┐рдпрд╛ рдЬрд╛рдП? рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрджреНрдпрдкрд┐ рдХрд┐рд╕реА рднреА рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕реЗ рдХреЗрд╡рд▓ object рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╣реА рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


 unknown_object: object print(unknown_object) print(unknown_object.startswith("hello")) # error: "object" has no attribute "startswith" print(unknown_object // 0) # error: Unsupported operand types for // ("object" and "int") 

рд╕рдВрдШ


рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдм рди рдХреЗрд╡рд▓ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдмрд▓реНрдХрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ, рдЖрдк typing.Union рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд╕рд╛рде рдПрдХ рдПрдиреЛрдЯреЗрд╢рдиред


 def hundreds(x: Union[int, float]) -> int: return (int(x) // 100) % 10 hundreds(100.0) hundreds(100) hundreds("100") # Argument 1 to "hundreds" has incompatible type "str"; expected "Union[int, float]" 

рд╡реИрд╕реЗ, Optional[T] рдПрдиреЛрдЯреЗрд╢рди Union[T, None] рдмрд░рд╛рдмрд░ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕реА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИред


рд╕рдВрдЧреНрд░рд╣


рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рддрдВрддреНрд░ рд╕рд╛рдорд╛рдиреНрдп рддрдВрддреНрд░ ( рдЬреЗрдирд░рд┐рдХ , рд▓реЗрдЦ рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЕрдзрд┐рдХ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрдВрдЯреЗрдирд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдирдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рддрддреНрд╡реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


рд╕реВрдЪрд┐рдпреЛрдВ


рдпрд╣ рджрд░реНрд╢рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рдЪрд░ рдореЗрдВ рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЖрдк рд╕реВрдЪреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрджрд┐ рдЖрдк рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдХреМрди рд╕реЗ рддрддреНрд╡ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдЯрд┐рдкреНрдкрдгреА рдЕрдм рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реЛрдЧреАред typing.List рд▓рд┐рдП typing.List рд╣реИред рд╣рдордиреЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╡реИрд░рд┐рдПрдмрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛, рдЗрд╕рдХреЗ рд╕рдорд╛рди, рд╣рдо рд╡рд░реНрдЧрд╛рдХрд╛рд░ рдХреЛрд╖реНрдардХреЛрдВ рдореЗрдВ рд╕реВрдЪреА рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред


 titles: List[str] = ["hello", "world"] titles.append(100500) # Argument 1 to "append" of "list" has incompatible type "int"; expected "str" titles = ["hello", 1] # List item 1 has incompatible type "int"; expected "str" items: List = ["hello", 1] 

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╕реВрдЪреА рдореЗрдВ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдЕрдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрдЦреНрдпрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрддреНрд╡ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдкрд░ рдХреЛрдИ рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ: рдЖрдк Any , Optional , List рдФрд░ рдЕрдиреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдЗрдЯрдо рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕реЗ Any рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред


рд╕реВрдЪреА рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рдорд╛рди рдПрдиреЛрдЯреЗрд╢рди рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рд╣реИрдВ: typing.FrozenSet ред рд╕реЗрдЯ рдФрд░ typing.FrozenSet ред typing.FrozenSet ред


tuples


рдЯреБрдкрд▓реНрд╕, рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЕрдХреНрд╕рд░ рд╡рд┐рд╖рдо рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд┐рдВрдЯреИрдХреНрд╕ рдПрдХ рдЕрдВрддрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╛рди рд╣реИ: рд╡рд░реНрдЧ рдмреНрд░реИрдХреЗрдЯ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЯрдкрд▓ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред


рдпрджрд┐ рдЖрдк рд╕реВрдЪреА рдХреЗ рд╕рдорд╛рди рдЯреНрдпреВрдкрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╣реИрдВ: рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рдЕрдЬреНрдЮрд╛рдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВ, рддреЛ рдЖрдк рджреАрд░реНрдШрд╡реГрддреНрдд ( ... ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рддрддреНрд╡ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдиреЛрдЯреЗрд╢рди Tuple рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ Tuple[Any, ...]


 price_container: Tuple[int] = (1,) price_container = ("hello") # Incompatible types in assignment (expression has type "str", variable has type "Tuple[int]") price_container = (1, 2) # Incompatible types in assignment (expression has type "Tuple[int, int]", variable has type "Tuple[int]") price_with_title: Tuple[int, str] = (1, "hello") prices: Tuple[int, ...] = (1, 2) prices = (1, ) prices = (1, "str") # Incompatible types in assignment (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]") something: Tuple = (1, 2, "hello") 

рд╢рдмреНрджрдХреЛрд╢реЛрдВ


рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХреЗ рд▓рд┐рдП, typing.Dict ред typing.Dict рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдФрд░ рдореВрд▓реНрдп рдкреНрд░рдХрд╛рд░ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдПрдиреЛрдЯреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:


 book_authors: Dict[str, str] = {"Fahrenheit 451": "Bradbury"} book_authors["1984"] = 0 # Incompatible types in assignment (expression has type "int", target has type "str") book_authors[1984] = "Orwell" # Invalid index type "int" for "Dict[str, str]"; expected type "str" 

рдЗрд╕реА рдкреНрд░рдХрд╛рд░ typing.DefaultDict рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


рдкрд░рд┐рдгрд╛рдо рдкрд░рд┐рдгрд╛рдо


рдлрд╝рдВрдХреНрд╢рди рдкрд░рд┐рдгрд╛рдо рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдХрд┐рд╕реА рднреА рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рд╣реИрдВред


рдпрджрд┐ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, print рддрд░рд╣), рддреЛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣рдореЗрд╢рд╛ None ред рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╣рдо None рднреА рдЙрдкрдпреЛрдЧ None ред


рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдз рд╡рд┐рдХрд▓реНрдк рд╣реЛрдВрдЧреЗ: рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ None рд▓реМрдЯрдирд╛, рдПрдХ рдореВрд▓реНрдп рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛, рдФрд░ рдмрд┐рдирд╛ рдХреЙрд▓ рдХрд┐рдП return рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред


 def nothing(a: int) -> None: if a == 1: return elif a == 2: return None elif a == 3: return "" # No return value expected else: pass 

рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдХрднреА рдирд╣реАрдВ рд▓реМрдЯрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ sys.exit ), рддреЛ рдЖрдкрдХреЛ NoReturn рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:


 def forever() -> NoReturn: while True: pass 

рдпрджрд┐ рдпрд╣ рдПрдХ рдЬрдирд░реЗрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЕрд░реНрдерд╛рдд, рдЗрд╕рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдПрдХ yield , рддреЛ рдЖрдк рд▓реМрдЯреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП Iterable[T] рдпрд╛ Generator[YT, ST, RT] рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 def generate_two() -> Iterable[int]: yield 1 yield "2" # Incompatible types in "yield" (actual type "str", expected type "int") 

рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп


рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рд╕рдм рдХреБрдЫ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, collections.abc.Iterator рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ Iterator typing.SupportsInt , typing.SupportsInt рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ __int__ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП __call__ рдЬреЛ __call__ рд╡рд┐рдзрд┐ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ


рдорд╛рдирдХ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рд╕реНрдЯрдм рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИред


рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЬреЗрдирд░рд┐рдХ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдХрд╛рдо рдХреЗ рддрдВрддреНрд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред

Source: https://habr.com/ru/post/hi432656/


All Articles