Хочется добавить тип локальной переменной? Пора делать рефакторинг!

Опубликовано 06 October 2016 в Python

PEP 526 добавляет начиная с Python 3.6 опциональную возможность указать тип для локальной переменной. Это более стройная замена комментариям с указанием типа. Это хорошо, но есть одна ловушка: указывание типа в питоне может скрыть проблемы в коде.

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

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

В случае сложного типа, можно попробовать определить свой класс или использовать namedtuple, или другие подобные инструменты, позволяющие добавить смысла общим типам.

Во втором случае, нужно попытаться разбить функцию или переписать ее более понятным способом.

К примеру, я очень люблю использовать "map", "sorted", "filter" и другие инструменты из functool. Иногда это приводит к построению таких конструкций, которые изменяют данные до неузнаваемости. К тому же становится очень сложно понять что должно получиться.

Конечно, можно добавить тип для результирующей переменной. Это сделает код немного более понятным. Но будет все еще далек от идеала. Лучше разбить конвейер на более мелкие и понятные куски, дать им хорошие значащие имена. Это действительно сделает код лучше.

---
Возник вопрос? Мне всегда можно написать в Twitter: avkorablev