Найти тему
С любовью о Python

Подчеркивания в именах Python. Коротко о главном

Оглавление

Без особых углублений в детали давайте разберем главные нюансы в применении подчеркиваний в именах Python. Рассмотрим все часто используемые варианты.

Более детально некоторые аспекты буду освещать в будущих статьях.

Приступим!

1. Игнорирование значений

Игнорирование одного значения

Часто можно встретить запись подобного вида:

-2

или такого:

-3

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

Игнорирование нескольких значений

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

-4

Можем просто перечислить несколько подчеркиваний для игнорирования значений:

-5

2. Подчеркивания перед именем

Одно подчеркивание перед именем

Одно подчеркивание перед именем указывает на то, что объект предназначен для внутреннего использования и вызывать его вне обозначенного класса, модуля или функции не стоит. Можно назвать это псевдо-приватной переменной или методом. “Псевдо” именно потому, что объект возможно вызывать извне, но делать это строго не рекомендуется.

Рассмотрим пример:

-6

Нам удалось получить доступ к обеим переменным, все значения распечатались без ошибок. Но об использовании приватных объектов нам напомнит IDE:

-7

Кроме того, приватную переменную не подсветит и автокомплит - когда мы напишем ExampleClass.,в предложенных вариантах мы не увидим нашу приватную переменную.

Для усложнения доступа к приватной переменной нам приходят на помощь 2 нижних подчеркивания.

Два подчеркивания перед именем. Искажения имен

Рассмотрим тот же пример, только добавим еще одну переменную с 2 подчеркиваниями перед именем:

-8

Вот, другое дело! Теперь вместо доступа к переменной мы получили исключение AttributeError.

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

Давайте воспользуемся встроенной функцией dir() и посмотрим все атрибуты нашего класса:

-9

Из списка всех атрибутов, найдем созданные нами: _ExampleClass__private_var, _pseudo_private_var, public_var .

Наша приватная переменная теперь с новым именем и именно поэтому мы уже не можем ее вызвать классическим способом ExampleClass.__private_var.

НО! Все-таки получить значение этой переменной мы можем, если укажем искаженное имя при вызове:

-10

Пусть возможность есть, но делать так не надо. :)

3. Подчеркивания после имени

Одно подчеркивание после имени

Одно подчеркивание после имени следует использовать, когда указанные нами имена совпадают со встроенными, например: type(), id(), object(), …

Вместо подобной записи:

-11

Следует использовать запись следующего вида:

-12

И никто к вам не придерется.

4. Двойные подчеркивания до и после имени

Таким образом обозначаются специальные переменные и методы.

Пара примеров использования переменных:

-13

Специальные методы еще называются магическими (в оригинале - dunder methods) - это отдельный вид искусства в Python.

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

5. Разделение чисел и вывод последнего значения в интерпретаторе

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

Разделение чисел с помощью подчеркивания

Для удобства чтения числа можно разделять подчеркиванием:

-14

С помощью проверки на равенство значений мы убедились, что num_1 равен num_2, разница лишь в читаемости.

Вывод последнего значения в интерпретаторе

Ну и если так случилось, что вам необходимо проверить какую-то гипотезу в интерпретаторе, можно воспользоваться одиночным знаком подчеркивания для вывода последнего значения:

-15

Теперь вы знаете, зачем нужны все эти подчеркивания и для чего их применять. Осталось только практиковать.

***

Присоединяйтесь ко мне в Telegram: https://t.me/python3_with_love. Там есть все, и читать код намного удобнее.