Что делает метод __set_name__ в дескрипторах Python 3.6+?

Метод __set_name__(owner, name) вызывается при создании класса и сообщает дескриптору класс-владелец и имя атрибута, под которым он объявлен.

Короткий ответ

Что ответить на собеседовании

Метод set_name(owner, name) вызывается при создании класса и сообщает дескриптору класс-владелец и имя атрибута, под которым он объявлен.

Подробный разбор

Ответ с пояснениями

Метод set_name(owner, name) вызывается при создании класса и сообщает дескриптору класс-владелец и имя атрибута, под которым он объявлен.

Так дескриптор может запомнить имя для сообщений об ошибках или внутреннего хранения значения, не получая его вручную в конструкторе. Например, self.storage_name = '_' + name. Вызов относится к атрибутам пространства имён создаваемого класса; при добавлении дескриптора в уже существующий класс через присваивание он автоматически не происходит — его вызывают явно при необходимости. Наличие __set_name__ само по себе не требует реализации __get__ или __set__: уведомление полезно и другим объектам класса.

Источник: docs.python.org.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее