Метод set_name(owner, name) вызывается при создании класса и сообщает дескриптору класс-владелец и имя атрибута, под которым он объявлен.
Что делает метод __set_name__ в дескрипторах Python 3.6+?
Метод __set_name__(owner, name) вызывается при создании класса и сообщает дескриптору класс-владелец и имя атрибута, под которым он объявлен.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Метод set_name(owner, name) вызывается при создании класса и сообщает дескриптору класс-владелец и имя атрибута, под которым он объявлен.
Так дескриптор может запомнить имя для сообщений об ошибках или внутреннего хранения значения, не получая его вручную в конструкторе. Например, self.storage_name = '_' + name. Вызов относится к атрибутам пространства имён создаваемого класса; при добавлении дескриптора в уже существующий класс через присваивание он автоматически не происходит — его вызывают явно при необходимости. Наличие __set_name__ само по себе не требует реализации __get__ или __set__: уведомление полезно и другим объектам класса.
Источник: docs.python.org.