Позволяет определить поведение при присвоении значения дескриптору.
object.__set__(self, instance, value)
-> None
self -- Ссылка на экземпляр.

instance -- Экземпляр класса владельца дескриптора.

value -- Значение, которое требуется присвоить.

Один из методов для реализации протокола дескриптора. Позволяет определить поведение при попытке присвоения значения указывающему на дескриптор атрибуту класса-владельца.

    class MyDescriptor(object):
"""Это класс дескриптора."""

def __init__(self, value):
self.value = value

def __set__(self, instance, value):
# Зачастую значение сохраняется в instance (см. my_owner ниже),
# для демонстрации сохраним его в объекте
# дескриптора.
self.value = value

def __get__(self, instance, owner):
# Зачастую здесь возвращают значение, хранящееся в instance -
# см. my_owner ниже.
return self.value


class MyOwner(object):
"""Это класс владелец дескрипторов."""

field1 = MyDescriptor('one')
field2 = MyDescriptor('two')


my_owner = MyOwner()
my_owner.field1 # one
my_owner.field1 = 1
my_owner.field1 # 1

# Мы храним присвоенное значение в объекте дескриптора,
# являющимся общим для всех наследников класса, а потому:
my_owner2 = MyOwner()
my_owner2.field1 # 1

На заметку
Дескрипторы, в которых определён только данный метод, называют дескрипторами не-данных, в противоположность дескрипторам данных, для которых определяются и другие методы протокола дескриптора.

Внимание
Если в __dict__ владельца имеется запись с ключём, совпадающим с именем атрибута, указывающего на дескриптор, то в случае дескрипторов данных при обращении к атрибуту вернётся значение из дескриптора, а не из __dict__. В случае дескрипторов не-данных наоборот — значение из __dict__.

    my_owner.__dict__['field1'] = 'some'
my_owner.field1 # 1

На заметку
Чтобы сделать дескриптор данных, доступный только для чтения, потребуется внутри метода поднять исключение AttributeError.
Синонимы поиска: object.__set__, object, __set__, descriptors, дескрипторы
На заметку
Зарегистрированные пользователи могут добавлять Книги.