рдЖрдЬ рд░рд╛рдд рдкрд╛рдпрдерди 3.8 рдмрд╛рд╣рд░ рдЖрдпрд╛ рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЛ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдорд┐рд▓реАрдВ:
- рдкреНрд░реЛрдЯреЛрдХреЙрд▓
- рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢
- рдЕрдВрддрд┐рдо рд╡рд┐рд╡рд░рдг
- рдирд┐рд╢реНрдЪрд┐рдд рдореВрд▓реНрдп рдорд┐рд▓рд╛рди
рдпрджрд┐ рдЖрдк рдЕрднреА рддрдХ рдПрдиреЛрдЯреЗрд╢рди рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ( рд╢реБрд░реБрдЖрдд , рдирд┐рд░рдВрддрд░рддрд╛ )
рдФрд░ рдЬрдм рд╣рд░ рдХреЛрдИ рд╡рд╛рд▓рд░рд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реИ, рдореИрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдирд╡реАрдирддрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ
рдкреНрд░реЛрдЯреЛрдХреЙрд▓
рдЕрдЬрдЧрд░ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рднрд╛рд╖рд╛рдУрдВ рдХреА рддрд░рд╣, рд╡рд░реНрдЧреЛрдВ рдХреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рд▓реЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рд╕рдВрд╕реНрдХрд░рдг 3.8 рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
PEP 544 рдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
"рдЗрдЯрд░реЗрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓" рдпрд╛ "рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓" рдЬреИрд╕реЗ рд╢рдмреНрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдФрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЕрдм рдЖрдк рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЪрд░рдг рдореЗрдВ рдЙрдирдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐, рдкрд╛рдпрдерди 3.6 рдХреЗ рд╕рд╛рде рд╢реБрд░реВ, рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рдорд╛рдирдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, SupportsInt
(рдЬрд┐рд╕рдореЗрдВ __int__
рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ), SupportsBytes
( __bytes__
рдЖрд╡рд╢реНрдпрдХрддрд╛ __bytes__
), рдФрд░ рдХреБрдЫ рдЕрдиреНрдпред
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╡рд┐рд╡рд░рдг
рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдПрдХ рдирд┐рдпрдорд┐рдд рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреА рд╡рд┐рдзрд┐рдпрд╛рдБ (рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рд╣рд┐рдд) рдФрд░ рдХреНрд╖реЗрддреНрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХрдХреНрд╖рд╛рдПрдВ рдЗрд╕рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
from abc import abstractmethod from typing import Protocol, Iterable class SupportsRoar(Protocol): @abstractmethod def roar(self) -> None: raise NotImplementedError class Lion(SupportsRoar): def roar(self) -> None: print("roar") class Tiger: def roar(self) -> None: print("roar") class Cat: def meow(self) -> None: print("meow") def roar_all(bigcats: Iterable[SupportsRoar]) -> None: for t in bigcats: t.roar() roar_all([Lion(), Tiger()])
рд╣рдо рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдирдП рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рдореВрд▓ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
class BigCatProtocol(SupportsRoar, Protocol): def purr(self) -> None: print("purr")
рд╕рд╛рдорд╛рдиреНрдп, рд╕реНрд╡-рдЯрд╛рдЗрдк, рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп
рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рдирд┐рдпрдорд┐рдд рдХрдХреНрд╖рд╛рдУрдВ рдХреА рддрд░рд╣, рдЬреЗрдирд░рд┐рдХ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред Protocol
рдФрд░ Generic[T, S,...]
рдХреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп Generic[T, S,...]
рдЖрдк рдмрд╕ Protocol[T, S,...]
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдПрдХ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рдХрд╛рд░ рдХрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реНрд╡-рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ ( PEP 484 рджреЗрдЦреЗрдВ)ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
C = TypeVar('C', bound='Copyable') class Copyable(Protocol): def copy(self: C) -> C: class One: def copy(self) -> 'One': ...
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм Callable
рдПрдиреЛрдЯреЗрд╢рди рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред
рдмрд╕ рд╡рд╛рдВрдЫрд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЗ __call__
рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реЗрдВ
рд░рдирдЯрд╛рдЗрдо рдЪреЗрдХ
рдпрджреНрдпрдкрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдХрднреА-рдХрднреА рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╡рд░реНрдЧ рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рдЗрд╕реЗ рд╕рдВрднрд╡ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП @runtime_checkable
рдбреЗрдХреЛрд░реЗрдЯрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рдФрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП isinstance
/ issubclass
рдЪреЗрдХ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдХрдИ рдЙрдкрдпреЛрдЧ рдкреНрд░рддрд┐рдмрдВрдз рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЬреЗрдирд░рд┐рдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ
рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢
рдЖрдорддреМрд░ рдкрд░ рд╕рдВрд░рдЪрд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдПрдВ (рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдПрдВ ) рдпрд╛ рдирд╛рдорд┐рдд рдЯреНрдпреВрдкрд▓реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ json рд╕рдВрд░рдЪрдирд╛ рд╡рд┐рд╡рд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХреБрдЫ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реЛрдирд╛ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
PEP 589 TypedDict
рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд░рд┐рдЪрдп TypedDict
, рдЬреЛ рдкрд╣рд▓реЗ mypy рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдерд╛
рдбрд┐рдЯреИрдЪреЗрд▓рд╛рд╕ рдпрд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдЯреБрдкрд▓реНрд╕ рдХреА рддрд░рд╣, рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢ рдХреЛ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВред рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдпрд╛ рдХрд╛рд░рдЦрд╛рдиреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ:
class Book(TypedDict): title: str author: str AlsoBook = TypedDict("AlsoBook", {"title": str, "author": str})
рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢ рд╕рдорд░реНрдерди рд╡рд┐рд░рд╛рд╕рдд:
class BookWithDesc(Book): desc: str
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╕рднреА рд╢рдмреНрджрдХреЛрд╢ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдХрдХреНрд╖рд╛ рдмрдирд╛рддреЗ рд╕рдордп total=False
рдкрд╛рд╕ рдХрд░рдХреЗ рдЗрд╕реЗ рдЕрдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╣ рдХреЗрд╡рд▓ рд╡рд░реНрддрдорд╛рди рдмреЙрдХреНрд╕ рдСрдлрд┐рд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХреБрдВрдЬрд┐рдпреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ
class SimpleBook(TypedDict, total=False): title: str author: str simple_book: SimpleBook = {"title": "Fareneheit 481"}
TypedDict
рдХрд╛ рдЙрдкрдпреЛрдЧ TypedDict
рдХреА рдХрдИ рд╕реАрдорд╛рдПрдБ рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ:
- рдЖрдЗрдВрд╕реНрдЯреАрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЪреЗрдХ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ
- рдЪрд╛рдмрд┐рдпрд╛рдБ рд╢рд╛рдмреНрджрд┐рдХ рдпрд╛ рдЕрдВрддрд┐рдо рдорд╛рди рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, .clear
рдпрд╛ del
рдЬреИрд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдСрдкрд░реЗрд╢рди рдРрд╕реЗ рд╢рдмреНрджрдХреЛрд╢ рдХреЗ рд╕рд╛рде рдирд┐рд╖рд┐рджреНрдз del
ред
рдПрдХ рдХреБрдВрдЬреА рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЬреЛ рд╢рд╛рдмреНрджрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЙрд╕реЗ рднреА рдирд┐рд╖рд┐рджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ
рдЕрдВрддрд┐рдо рд╕рдВрд╢реЛрдзрди рдХрд░рдиреЗрд╡рд╛рд▓рд╛
рдкреАрдИрдкреА 591 рдХрдИ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╕рдВрд╢реЛрдзрдХ (рдПрдХ рдбреЗрдХреЛрд░реЗрдЯрд░ рдФрд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ) рдХрд╛ рдкрд░рд┐рдЪрдп рджреЗрддрд╛ рд╣реИ
- рдПрдХ рд╡рд░реНрдЧ рдХрд╛ рдкрджрдирд╛рдо рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ:
from typing import final @final class Childfree: ... class Baby(Childfree):
- рдУрд╡рд░рд░рд╛рдЗрдбрд┐рдВрдЧ рд╕реЗ рдирд┐рд╖рд┐рджреНрдз рд╡рд┐рдзрд┐ рдХрд╛ рдкрджрдирд╛рдо:
from typing import final class Base: @final def foo(self) -> None: ... class Derived(Base): def foo(self) -> None:
- рдПрдХ рдЪрд░ (рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ред рдХреНрд▓рд╛рд╕ рдлрд╝реАрд▓реНрдб) рдХрд╛ рдкрджрдирд╛рдо, рдЬрд┐рд╕реЗ рдкреБрди: рдЕрд╕рд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордирд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
ID: Final[float] = 1 ID = 2
рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдлреЙрд░реНрдо рдХрд╛ рдПрдХ рдХреЛрдб self.id: Final = 123
рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ __init__
рд╡рд┐рдзрд┐ рдореЗрдВ
рд╢рд╛рдмреНрджрд┐рдХ
Literal
рдкреАрдИрдкреА 586 рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЖрдкрдХреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореВрд▓реНрдпреЛрдВ рдкрд░ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Literal[42]
рдЕрд░реНрде рд╣реИ рдХрд┐ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдХреЗрд╡рд▓ 42 рдХреА рдЙрдореНрдореАрдж рд╣реИред
рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рди рдХреЗрд╡рд▓ рдореВрд▓реНрдп рдХреА рд╕рдорд╛рдирддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬрд╛рддреА рд╣реИ, рдмрд▓реНрдХрд┐ рдЗрд╕рдХреЗ рдкреНрд░рдХрд╛рд░ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ 0 рдХреА рдЙрдореНрдореАрдж рд╣реИ рддреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛)ред
def give_me_five(x: Literal[5]) -> None: pass give_me_five(5)
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдХрдИ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреЛрд╖реНрдардХ рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рд╕рдВрдШ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ (рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рд╕рдВрдпреЛрдЧ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ)ред
рднрд╛рд╡ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Literal[1+2]
) рдпрд╛ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдорд╛рдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдореВрд▓реНрдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, Literal
рдХрд╛ рдЙрдкрдпреЛрдЧ open()
рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ mode
рдорд╛рдиреЛрдВ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ mode
ред
рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реИрдВрдбрд▓
рдпрджрд┐ рдЖрдк рдХрд╛рд░реНрдпрдХреНрд░рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИ, рддреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА (рдЬреИрд╕реЗ рдореЗрд░реЗ ) рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,
get_origin рдФрд░ get_args рдлрд╝рдВрдХреНрд╢рди рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рддреЛ, X[Y, Z,...]
рдХреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП X[Y, Z,...]
рдЯрд╛рдЗрдк X
рдХреЛ рдореВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реМрдЯрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ (Y, Z, ...)
рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдпрджрд┐ X collections
рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдкреНрд░рдХрд╛рд░ рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдирд╛рдо рд╣реИ, рддреЛ рдЗрд╕реЗ рдореВрд▓ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
assert get_origin(Dict[str, int]) is dict assert get_args(Dict[int, str]) == (int, str) assert get_origin(Union[int, str]) is Union assert get_args(Union[int, str]) == (int, str)
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, __parameters__
рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рдерд╛
рд╕рдВрджрд░реНрдн