NamedTuple — именованный кортеж
Можно воспользоваться именованным кортежем NamedTuple
. В Python есть именованные кортежи в составе пакета collections
и в составе typing
. Чтобы можно было указать полям кортежа типы мы, конечно, воспользуемся импортом из typing
:
from typing import NamedTuple
class Coordinates(NamedTuple):
latitude: float
longitude: float
def get_gps_coordinates() -> Coordinates:
"""Returns current coordinates using MacBook GPS"""
return Coordinates(10, 20)
Именованные кортежи — такие же кортежи, как и обычные tuple
, но каждый элемент кортежа имеет имя, по которому мы можем к нему обращаться. Обращаться по имени ведь проще, чем по индексу. Индекс 0
нам мало что говорит о данных, которые лежат в этом индексе, а имя longitude
прямо говорит нам, что тут хранится географическая долгота.
Теперь пользоваться кодом проще и разночтений никаких нет:
coordinates = get_gps_coordinates()
print(f"Широта:", coordinates.latitude) # Печать широты
print(f"Долгота:", coordinates.longitudeRRR) # IDE подсветит ошибку опечатки
В редакторе кода срабатывает автокомплит (autocomplete), то есть автодополнение кода. Мы начинаем набирать coordinates.lat
и редактор подсказывает нам, что здесь должно быть latitude
, можно просто выбрать то, что подсказывает редактор и ускорить набор текста, заодно устранив шанс возникновения опечаток:
А ещё, если по какой-то причине опечатки всё же возникли, то редактор подсветит нам места с такими проблемами:
При этом такой именованный кортеж по-прежнему является кортежем, то есть им можно пользоваться и так, с распаковкой:
latitude, longitude = get_gps_coordinates()
А также, как и в случае с обычным кортежем, нельзя изменять значения элементов кортежа:
coordinates = get_gps_coordinates()
coordinates.latitude = 10 # IDE подсветит ошибку тут