Аннотирование типов, которое мы использовали в определении класса FourVector
, служит для документирования и улучшения читаемости кода. Далеко не всегда очевидно какие ограничения (контракты) разработчик предполагает для аргументов функции, поэтому аннотирование типов весьма полезно, особенно когда проект достаточно большой и над ним работают несколько человек. Хорошим стилем является не только использование аннотации типов, но и подробное описание всех контрактов функции в строке комментария, например:
def split_count(document: str, sep: str) -> (int):
""" Подсчитывает количество частей, на которые разделитель sep разбивает
строку document
Аргументы:
- document: str - строка
- sep: str - разделитель
Возвращает:
- int
"""
return len(document.split(sep))
Встроенная функция help
для функции split_count
вернет очень информативную подсказку:
help(split_count)
# Help on function split_count in module __main__:
#
# split_count(document: str, sep: str) -> int
# Подсчитывает количество частей, на которые разделитель sep разбивает
# строку document
#
# Аргументы:
# - document: str - строка
# - sep: str - разделитель
#
# Возвращает:
# - int
Соответствие переданных значений аннотации типов никак не проверяется в ходе работы интерпретатора. Вся ответственность проверки лежит на разработчике (который может выполнить проверки типов) и пользователе (который должен соблюдать контракты функции).
Пакет typing содержит разнообразные инструменты для аннотации типов. Рекомендуем читателю самостоятельно изучить примеры его использования.