object.__set__
Позволяет определить поведение при присвоении значения дескриптору.
object.__set__(self, instance, value)
-> None
self -- Ссылка на экземпляр.
instance -- Экземпляр класса владельца дескриптора.
value -- Значение, которое требуется присвоить.
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, дескрипторы
В разделе «object (объект)»:
file (файл)
object.__add__
object.__bool__
object.__call__
object.__ceil__
object.__class__
object.__cmp__
object.__contains__
object.__copy__
object.__deepcopy__
object.__del__
object.__delattr__
object.__delete__
object.__delitem__
object.__delslice__
object.__dir__
object.__enter__
object.__eq__
object.__exit__
object.__floor__
object.__format__
object.__ge__
object.__get__
object.__getattr__
object.__getattribute__
object.__getitem__
object.__getslice__
object.__getstate__
object.__gt__
object.__hash__
object.__init__
object.__init_subclass__
object.__iter__
object.__le__
object.__len__
object.__lt__
object.__missing__
object.__ne__
object.__new__
object.__next__
object.next
object.__nonzero__
object.__qualname__
object.__rcmp__
object.__repr__
object.__reversed__
object.__setattr__
object.__setitem__
object.__set_name__
object.__setslice__
object.__setstate__
object.__slots__
object.__str__
object.__sub__
object.__subclasses__
object.__unicode__
property (свойство)
Protocols (протоколы)
slice (срез)
Встроенные исключения
На заметку
Зарегистрированные пользователи могут публиковать свои Статьи.