
рдореИрдЧреНрдбреЗрд▓реЗрдирд╛ рдЯреЛрдореНрдЬрд╝рдХ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рддреНрд░рдг
рд▓реЗрдЦ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рдмрддрд╛рдИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЬреЗрдиреЗрд░рд┐рдХ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрдВрддреНрд░ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА-рдХрднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд░рд▓ рдЪреАрдЬреЛрдВ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛
рдЕрдЧреНрд░рд┐рдо рдШреЛрд╖рдгрд╛
рдЖрдорддреМрд░ рдкрд░ рдЖрдк рдЗрд╕реЗ рдмрдирд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рднреА рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛрдЧрд╛:
class LinkedList: data: Any next: LinkedList
рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдиреЛрдЯреЗрд╢рди рдХреА рдЧрдгрдирд╛ рдЖрд╕реНрдердЧрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред
class LinkedList: data: Any next: 'LinkedList'
рдЖрдк рдЕрдиреНрдп рдореЙрдбреНрдпреВрд▓ рд╕реЗ рднреА рдХрдХреНрд╖рд╛рдУрдВ рддрдХ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВ (рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдпрджрд┐ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ): some_variable: 'somemodule.SomeClass'
рдЯрд┐рдкреНрдкрдгреАрд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдХрд┐рд╕реА рднреА рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЕрдиреБрд╢рдВрд╕рд╛ рдХреА рдЬрд╛рддреА рд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рд░рдЦрд╛ рдЬрд╛рдП рддрд╛рдХрд┐ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рд╡реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рдирд▓ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдордЭреЗрдВрдЧреЗред рдпрд╣рд╛рдВ рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ: рдкреАрдИрдкреА 484 - рдкреНрд░рдХрд╛рд░ рд╕рдВрдХреЗрдд # рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкреНрд░рдХрд╛рд░ рд╕рдВрдХреЗрдд
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рдХреЛрдб рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдПрдиреЛрдЯреЗрд╢рди рднреА рд░рдирдЯрд╛рдЗрдо рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдорд╛рдЗрдкреА рдЗрд╕ рдкрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛
def get_next_type(arg=None): if arg: return LinkedList else: return Any class LinkedList: data: Any next: 'get_next_type()'
UPD : рдкрд╛рдпрдерди 4.0 рдореЗрдВ, рдпрд╣ рдЖрд╕реНрдердЧрд┐рдд рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдЧрдгрдирд╛ ( PEP 563 ) рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрдХрдиреАрдХ рд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╢рд╛рдмреНрджрд┐рдХреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рджрд┐рд▓рд╛рдПрдЧрд╛ред рдЕрдЬрдЧрд░ 3.7 рдХреЗ рд╕рд╛рде рдЖрдк from __future__ import annotations
рдирд┐рд░реНрдорд╛рдг from __future__ import annotations
рдирдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХрд╛рд░реНрдп рдФрд░ рдХреЙрд▓ рдХреА рдЧрдИ рд╡рд╕реНрддреБрдПрдБ
рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдм рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ), рдЖрдкрдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ [[ArgType1, ArgType2, ...], ReturnType]
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
def help() -> None: print("This is help string") def render_hundreds(num: int) -> str: return str(num // 100) def app(helper: Callable[[], None], renderer: Callable[[int], str]): helper() num = 12345 print(renderer(num)) app(help, render_hundreds) app(help, help)
рдЕрдкрдиреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдХреЗрд╡рд▓ рд╡рд╛рдкрд╕реА рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рджреАрд░реНрдШрд╡реГрддреНрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: Callable[..., ReturnType]
ред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рджреАрд░реНрдШрд╡реГрддреНрдд рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреЛрдИ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдирд╣реАрдВ рд╣реИрдВред
рдлрд┐рд▓рд╣рд╛рд▓, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдирд╛рдорд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рдВрдХреНрд╢рди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░
рдХрднреА-рдХрднреА рдпрд╣ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕реЗ рд╕рдЦреНрддреА рд╕реЗ рдареАрдХ рдХрд┐рдП рдмрд┐рдирд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдХрдВрдЯреЗрдирд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд╕рдорд╛рди рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЙрд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдПрдХ рддрд░реНрдХ рд╣реИред
рд▓рд┐рд╕реНрдЯ рдпрд╛ рдХреЙрд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдЬреИрд╕реЗ рдкреНрд░рдХрд╛рд░, рдЬреЛ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦреЗ рдереЗ, рдХреЗрд╡рд▓ рдЬреЗрдиреЗрд░рд┐рдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, TypeVar рд╡реИрд░рд┐рдПрдмрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЬреЛ рдЬреЗрдиреЗрд░рд┐рдХ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдЧреА, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рд╕реАрдзреЗ рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ:
T = TypeVar("T") class LinkedList(Generic[T]): data: T next: "LinkedList[T]" def __init__(self, data: T): self.data = data head_int: LinkedList[int] = LinkedList(1) head_int.next = LinkedList(2) head_int.next = 2
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рдХрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕реНрд╡рдд: рдкреНрд░рд╡реЗрд╢ред
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдПрдХ рдЬреЗрдиреЗрд░рд┐рдХ рдореЗрдВ рдХрдИ рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: Generic[T1, T2, T3]
ред
рдЯрд╛рдЗрдкрд╡рд░реНрдХрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЖрдк рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
T2 = TypeVar("T2", int, float) class SomethingNumeric(Generic[T2]): pass x = SomethingNumeric[str]()
рдХрд╛рд╕реНрдЯ
рдХрднреА-рдХрднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЪрд░ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рдХрд╛рд╕реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░реНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рд╣реИ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
from typing import List, cast def find_first_str(a: List[object]) -> str: index = next(i for i, x in enumerate(a) if isinstance(x, str)) return cast(str, a[index])
рдпрд╣ рдбреЗрдХреЛрд░реЗрдЯрд░реНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
MyCallable = TypeVar("MyCallable", bound=Callable) def logged(func: MyCallable) -> MyCallable: @wraps(func) def wrapper(*args, **kwargs): print(func.__name__, args, kwargs) return func(*args, **kwargs) return cast(MyCallable, wrapper) @logged def mysum(a: int, b: int) -> int: return a + b mysum(a=1)
рд░рдирдЯрд╛рдЗрдо рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдпрджреНрдпрдкрд┐ рджреБрднрд╛рд╖рд┐рдпрд╛ рдЕрдкрдиреЗ рдЖрдк рд╣реА рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдЖрдкрдХреЗ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬрдмрдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЪрд▓ рд░рд╣рд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП, рдПрдХ __annotations__
рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ __annotations__
рдХреА __annotations__
рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдХреЗрддрд┐рдд рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рд╣реЛрддрд╛ рд╣реИред рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд▓рд┐рдП, рдпреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдиреЛрдЯреЗрд╢рди рдФрд░ рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░ рд╣реИрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП, рдлрд╝реАрд▓реНрдб рдПрдиреЛрдЯреЗрд╢рди, рд╡реИрд╢реНрд╡рд┐рдХ рд╕реНрдХреЛрдк, рдЪрд░ рдФрд░ рдЙрдирдХреЗ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдПред
def render_int(num: int) -> str: return str(num) print(render_int.annotations)
get_type_hints
рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ - рдпрд╣ рдЗрд╕рдХреЗ рдкрд╛рд╕ рджрд┐рдП рдЧрдП рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдиреЛрдЯреЗрд╢рди рджреЗрддрд╛ рд╣реИ, рдХрдИ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдпрд╣ __annotations__
рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рдЕрдВрддрд░ рднреА рд╣реИрдВ: рдпрд╣ рдореВрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдПрдиреЛрдЯреЗрд╢рди ( __mro__
рдХреЗ рд░рд┐рд╡рд░реНрд╕ рдСрд░реНрдбрд░ рдореЗрдВ) рдХреЛ рднреА рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдФрд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреНрд░рдХрд╛рд░ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдШреЛрд╖рдгрд╛рдУрдВ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
T = TypeVar("T") class LinkedList(Generic[T]): data: T next: "LinkedList[T]" print(LinkedList.__annotations__)
рдЬреЗрдиреЗрд░рд┐рдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, __origin__
рдФрд░ __args__
рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрд╡рдпрдВ рдФрд░ рдЙрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрд▓рдмреНрдз рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорд╛рдирдХ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 3.6 рдФрд░ 3.7 рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдмрджрд▓ рдЧрдпрд╛ рд╣реИ