Анотовані заяви про призначення

Оновлено: 24.04.2023

Анотація присвоєння — це комбінація в одному операторі анотації змінної або атрибута та необов’язкового оператора призначення:

annotated_assignment_stmt ::=  augtarget ":" expression
                               ["=" (starred_expression | yield_expression)]

The difference from normal Заяви про призначення is that only a single target is allowed.

Для простих імен як цілей призначення, якщо вони знаходяться в області класу або модуля, анотації оцінюються та зберігаються в спеціальному атрибуті класу або модуля __annotations__, який є словниковим відображенням імен змінних (спотворених, якщо приватні) до оцінюваних анотацій. Цей атрибут доступний для запису та автоматично створюється на початку виконання класу або тіла модуля, якщо анотації знайдено статично.

Для виразів як цілей призначення анотації оцінюються, якщо вони знаходяться в області класу або модуля, але не зберігаються.

Якщо ім’я анотовано в області видимості функції, то це ім’я є локальним для цієї області. Анотації ніколи не оцінюються та зберігаються в областях функцій.

Якщо присутня права сторона, анотоване призначення виконує фактичне призначення перед оцінкою анотацій (де це можливо). Якщо права сторона відсутня для цільового виразу, то інтерпретатор оцінює ціль, за винятком останнього виклику __setitem__() або __setattr__().