Выбор ответа Middle ООП и dataclasses обновлено

Двойное подчёркивание в имени атрибута

Вопрос

Что происходит с атрибутом self.__token внутри класса Client?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Имя искажается в Clienttoken, чтобы не конфликтовать с наследниками. Name mangling переписывает имя на этапе компиляции класса, и снаружи атрибут доступен как obj.Clienttoken.

Варианты ответа

  1. Имя искажается в _Client__token, чтобы не конфликтовать с наследникамиправильный ответ
  2. Атрибут становится по-настоящему приватным, и доступ снаружи класса невозможен
  3. Атрибут становится атрибутом класса
  4. Python бросает SyntaxError: двойное подчёркивание зарезервировано

Разбор

Name mangling переписывает имя на этапе компиляции класса, и снаружи атрибут доступен как obj._Client__token. Настоящей приватности в Python нет, это защита от случайного затирания атрибута в подклассе. Атрибут остаётся атрибутом экземпляра. Зарезервированы имена вида __x__ (dunder), но и их писать можно.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме