Переименование при импорте

Опубликовано 18 марта 2019 в Python

В Python есть замечательная возможность присваивать свои имена при импорте (import foo.bar.baz as fbb). Так можно легко избежать конфликтов имен при импорте и повысить читаемость кода, если требуется. Но этой же возможностью можно легко превратить хороший код в абсолютно нечитаемый. В последнее время я несколько раз встречался с этим: попадались мне, в основном, странные сокращения и непонятные имена для алиасов.

Продемонстрирую проблему на примере сокращений. Хороший пример придумать с ними проще.

    from facebook import utils as fbu
    from twitter import units as tu

Отлично. Конфликта имен избежали. Но что такое tu? Если встретить такое имя в коде, то придется совершать дополнительные действия, что бы понять что автор имел ввиду. гораздо лучше если будет что-то вроде такого:

    from facebook import utils as facebook_utils
    from twitter import units as twitter_utils

Уж теперь-то никаких вопросов в коде не возникнет. Конечно имена немного длиннее, но кто сейчас экономит байтики? Я бы использовал эту формулу импорта в подобном случае даже, если импортируется одна из библиотек с утилитами: читаемость кода будет выше.

Оказалось, что обосновать читаемость кода не так-то просто обосновать. Обычно на претензии к сокращениям отвечают, что можно в импорте посмотреть, что это значит и откуда прилетело. Безусловно можно. В IDE вообще никаких проблем с этим нет: ткнул в нужное место, перешел к определению, почитал, вернулся обратно.

Но большая часть чтений кода происходит в PR на github или подобной системе. Читается маленький дифф, где может просто не быть нужного импорта. Приходится “раскручивать” файл, что бы добраться до нужной строчки. Никакой помощи в навигации по коду тут нет. Остается только экономить время читающего используя осмысленные переименования.

Каково ваше мнение? Стоит вообще переживать по этому поводу и отправлять PR на доработку в подобных случаях?