Написать пост

Аннотации переменных в Python

Аватар Никита Прияцелюк

Аннотации переменных — следующий шаг развития аннотаций типов. Сегодня мы подробно расскажем, что они из себя представляют и как их использовать.

Обложка поста Аннотации переменных в Python

В Python 3.6 появилась такая интересная особенность, как синтаксис для аннотаций переменных. Подробнее про это нововведение можно прочитать в PEP 526. Суть этого PEP заключается в том, чтобы перевести идею аннотаций типов (PEP 484) на её следующую логическую ступень, т.е. сделать возможным указание типов переменных, включая поля классов и объектов.

Следует принять во внимание, что это нововведение не делает Python статически типизированным языком. Интерпретатору всё равно, какой тип указан у переменной. Тем не менее в среде разработки на Python или другом инструменте вроде pylint может быть включена функция проверки аннотаций, которая сообщит вам, если вы сначала указали один тип переменной, а затем попытались использовать её в качестве другого типа далее в программе.

Давайте взглянем на простой пример, чтобы посмотреть, как это работает:

			# annotate.py
name: str = 'Mike'
		

В нашем файле annotate.py мы создали переменную name и добавили аннотацию, говорящую о том, что это строка. Аннотацию можно добавить, поставив двоеточие после имени переменной и затем указав нужный тип. Присваивать значение переменной вовсе не обязательно:

			# annotate.py
name: str
		

Прим.перев. Указать тип в Python 3.5 подобным образом не выйдет. Вместо этого есть возможность указывать тип в комментарии:

			# annotate.py
name = 'Mike' # type: str
		

Все переменные с аннотациями добавляются в атрибут __annotations__ модуля или класса. Давайте импортируем первую версию нашего модуля annotate и получим доступ к этому атрибуту:

			>>> import annotate
>>> annotate.__annotations__
{'name': <class 'str'>}
>>> annotate.name
'Mike'
		

Как вы видите, атрибут __annotations__ возвращает словарь с аннотацией в качестве значения. Давайте добавим ещё несколько аннотаций в наш модуль и посмотрим, как изменится атрибут __annotations__:

			# annotate.py
name: str = 'Mike'

ages: list = [12, 20, 32]

class Car:
    variable: dict
		

В этом примере мы добавили список с аннотацией и класс, содержащий переменную с аннотацией. Теперь давайте импортируем новую версию нашего модуля и посмотрим на атрибут __annotations__:

			>>> import annotate
>>> annotate.__annotations__
{'name': <class 'str'>, 'ages': <class 'list'>}
>>> annotate.Car.__annotations__
{'variable': <class 'dict'>}
>>> car = annotate.Car()
>>> car.__annotations__
{'variable': <class 'dict'>}
		

В этот раз в словаре находится два объекта. Как вы могли заметить, в нём нет поля класса. Чтобы получить к нему доступ, мы должны обратиться к классу Car напрямую или создать экземпляр класса и получить атрибут таким образом.

Заключение

Теперь вы знаете достаточно о такой особенности Python, как аннотации переменных. Она будет особенно полезна программистам, привыкшим работать со статически типизированными языками.

Следите за новыми постами
Следите за новыми постами по любимым темам
24К открытий24К показов