Пишем чистый код на Python 🚀



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



Python typing module




Обычно его импортируют так:

import typing as tp



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

Давайте рассмотрим примеры и убедимся, что с использованием модуля typing код будет выглядеть более читабельным.



 Например, вы хотите задать переменную, где будут храниться данные из конфигурационного файла. Вы знаете, что конфигурационный файл - это словарь, где ключ и значение строкового типа. Явно это укажем.

config: tp.Dict[str, str]



 Также нужно явно прописывать тайпинги, если вы описываете атрибуты класса. Помним, что атрибуты класса могут быть любые. Давайте посмотрим пример, где одним из атрибутов класса является параметр trained_models - список, внутри которого лежат обученные модели типа ModelBase.

class FittedData():     users: pd.DataFrame     trained_models: tp.List[ModelBase]



 А теперь давайте представим, что в списке trained_models могут лежат не только модели типа ModelBase. Такой вариант модуль typing тоже поможет описать. Пусть мы знаем, что в trained_models хранятся модели разного типа. trained_models:



tp.List[tp.Union[ModelFirst, ModelSecond]]



📌 Здесь используемся тип аннотации Union[] модуля typing. Такой тип представляет собой тип объединения - эквивалентно ModelFirst | ModelSecond, который означает либо ModelFirst, либо ModelSecond.